/** * This function replace only the first pattern matched with the replacement. * * @param pattern pattern string to match * @param input input string * @param replacement replacement string * @return returns the processed string * @exception throws a FrameworkException when the pattern/replacement is null. */ public static String replaceFirst(String pattern, String input, String replacement) throws FrameworkException { if ((pattern == null) || (input == null) || (replacement == null)) { throw new FrameworkException( "RegexUtil: replaceFirst(): pattern or input cannot be null. " + "pattern = " + pattern + "input = " + input + "replacement = " + replacement); } String result = null; String perl5SubstitutionPattern = null; Perl5Util util = new Perl5Util(); // default return value result = input; perl5SubstitutionPattern = makePerl5SubstitutionPattern(pattern, replacement); pattern = makePerl5MatchPattern(pattern); if (util.match(pattern, input)) { result = util.substitute(perl5SubstitutionPattern, input); } return result; }
/** * This function takes a perl5 regular expression as the pattern to perform pattern matching and * string substitution. * * <p>"s/pattern/replacement/[g][i][m][o][s][x]" * * <p>g - substitute globally (all occurence) i - case insensitive m - treat the input as * consisting of multiple lines o - interpolate once s - treat the input as consisting of a single * line x - enable extended expression syntax incorporating whitespace and comments * * <p>to perform string substitution. Unless the [g] option is specified, the dafault is to * replace only the first occurrence. * * @param perl5Pattern - Perl5 regular expression * @param input - input string * @return result - processed string. The original input is returned when there is no match * @exception - FrameworkException is thrown when either pattern or input is null */ public static String substitute(String perl5Pattern, String input) throws FrameworkException { if ((perl5Pattern == null) || (input == null)) { throw new FrameworkException( "RegexUtil: replaceAll(): Either input or pattern is null." + "input = " + input + ", " + "pattern = " + perl5Pattern); } if (Debug.isLevelEnabled(Debug.MSG_STATUS)) { Debug.log( Debug.MSG_STATUS, "RegexUtils: replaceAll: perl5Pattern = " + perl5Pattern + " input = " + input); } Perl5Util util = new Perl5Util(); String result = input; try { result = util.substitute(perl5Pattern, input); } catch (RuntimeException e) { throw new FrameworkException("RegexUtils: substitute: " + e.getMessage()); } return result; }
/** * This function replace only the first pattern matched with the replacement. * * @param pattern pattern string to match * @param input input string * @param replacement replacement string * @return returns the processed string * @exception throws a FrameworkException when the pattern/replacement is null. */ public static String replaceLast(String pattern, String input, String replacement) throws FrameworkException { if ((pattern == null) || (input == null) || (replacement == null)) { throw new FrameworkException( "RegexUtil: replaceLast(): pattern or input cannot be null. " + "pattern = " + pattern + "input = " + input + "replacement = " + replacement); } Perl5Util util = new Perl5Util(); MatchResult matchResult = null; String result = null; String pre = null; String post = null; StringBuffer resultBuffer = new StringBuffer(); int length = input.length(); String regex = makePerl5SubstitutionPattern(pattern, replacement); pattern = makePerl5MatchPattern(pattern); // counts the number of match and grab the last one while (util.match(pattern, input)) { // getting the string before match pre = util.preMatch(); resultBuffer.append(pre); // get the matched string matchResult = util.getMatch(); resultBuffer.append(matchResult.toString()); // get the post string after the match post = util.postMatch(); // the post becomes the new input input = post; } // get the last match found matchResult = util.getMatch(); // do the string replacement on the pattern found result = util.substitute(regex, matchResult.toString()); resultBuffer.append(result); resultBuffer.append(post); return resultBuffer.toString(); }
/** * This function substitues ALL occurence of the pattern in the input with the replacement passed * in. This function can handle such situation as when some characters in the replacement is also * used in the pattern. * * <p>i.e.) pattern - & or &/[option] replacement - & or &/[option] * * @param pattern pattern string to match * @param input input string * @param replacement replacement string to be replaced with * @return returns processed string. Default return value is the original input string. * @exception throws FrameworkException when either pattern/input/replacement is null. */ public static String replaceAll(String pattern, String input, String replacement) throws FrameworkException { if ((pattern == null) || (replacement == null) || (input == null)) { Debug.log( Debug.ALL_ERRORS, "RegexUtils.replaceAll(): pattern or replacement or input" + "is null."); throw new FrameworkException( "ERROR: RegexUtils: replaceAll(): pattern or replacement or input is null."); } Perl5Util util = new Perl5Util(); String negativeLookAheadPattern = makePerl5MatchPatternNegativeLookAhead(pattern, replacement); String substitutionPattern = makePerl5SubstitutionPattern(negativeLookAheadPattern, replacement); String result = util.substitute(substitutionPattern, input); return result; }