Hello, I implemented 2 null safe methods to replace into a String with regular expression : - String replaceAll(String text, String regex, String replacement); - String replaceFirst(String text, String regex, String replacement);
The StringUtils.replacePattern(String source, String regex, String replacement) method adds Pattern#DOTALL option by default which may be undesired. Moreover, this methods is not null safe. I think it could be added to StringUtils. I opened a JIRA ticket (LANG-1139) and an associated Pull Request (#92) There is detail : /** * <p>Replaces each substring of the text String that matches the given regular expression * with the given replacement.</p> * * This method is a {@code null} safe equivalent to: * <ul> * <li>{@code text.replaceAll(regex, replacement)}</li> * <li>{@code Pattern.compile(regex).matcher(text).replaceAll(replacement)}</li> * </ul> * * <p>A {@code null} reference passed to this method is a no-op.</p> * * <p>Unlike in the {@link #replacePattern(String, String, String)} method, the {@link Pattern#DOTALL} option * is NOT automatically added. * To use the DOTALL option prepend <code>"(?s)"</code> to the regex. * DOTALL is also know as single-line mode in Perl.</p> * * <pre> * StringUtils.replaceAll(null, *, *) = null * StringUtils.replaceAll("any", null, *) = "any" * StringUtils.replaceAll("any", *, null) = "any" * StringUtils.replaceAll("", "", "zzz") = "zzz" * StringUtils.replaceAll("", ".*", "zzz") = "zzz" * StringUtils.replaceAll("", ".+", "zzz") = "" * StringUtils.replaceAll("<__>\n<__>", "<.*>", "z") = "z\nz" * StringUtils.replaceAll("<__>\n<__>", "(?s)<.*>", "z") = "z" * StringUtils.replaceAll("ABCabc123", "[a-z]", "_") = "ABC___123" * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "_") = "ABC_123" * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "") = "ABC123" * StringUtils.replaceAll("Lorem ipsum dolor sit", "( +)([a-z]+)", "_$2") = "Lorem_ipsum_dolor_sit" * </pre> * * @param text text to search and replace in, may be null * @param regex the regular expression to which this string is to be matched * @param replacement the string to be substituted for each match * @return the text with any replacements processed, * {@code null} if null String input * * @throws PatternSyntaxException * if the regular expression's syntax is invalid * * @see String#replaceAll(String, String) * @see java.util.regex.Pattern * @see java.util.regex.Pattern#DOTALL */ public static String replaceAll(final String text, final String regex, final String replacement); /** * <p>Replaces the first substring of the text string that matches the given regular expression * with the given replacement.</p> * * This method is a {@code null} safe equivalent to: * <ul> * <li>{@code text.replaceFirst(regex, replacement)}</li> * <li>{@code Pattern.compile(regex).matcher(text).replaceFirst(replacement)}</li> * </ul> * * <p>A {@code null} reference passed to this method is a no-op.</p> * * <p>The {@link Pattern#DOTALL} option is NOT automatically added. * To use the DOTALL option prepend <code>"(?s)"</code> to the regex. * DOTALL is also know as single-line mode in Perl.</p> * * <pre> * StringUtils.replaceFirst(null, *, *) = null * StringUtils.replaceFirst("any", null, *) = "any" * StringUtils.replaceFirst("any", *, null) = "any" * StringUtils.replaceFirst("", "", "zzz") = "zzz" * StringUtils.replaceFirst("", ".*", "zzz") = "zzz" * StringUtils.replaceFirst("", ".+", "zzz") = "" * StringUtils.replaceFirst("<__>\n<__>", "<.*>", "z") = "z\n<__>" * StringUtils.replaceFirst("<__>\n<__>", "(?s)<.*>", "z") = "z" * StringUtils.replaceFirst("ABCabc123", "[a-z]", "_") = "ABC_bc123" * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "_") = "ABC_123abc" * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "") = "ABC123abc" * StringUtils.replaceFirst("Lorem ipsum dolor sit", "( +)([a-z]+)", "_$2") = "Lorem_ipsum dolor sit" * </pre> * * @param text text to search and replace in, may be null * @param regex the regular expression to which this string is to be matched * @param replacement the string to be substituted for the first match * @return the text with the first replacement processed, * {@code null} if null String input * * @throws PatternSyntaxException * if the regular expression's syntax is invalid * * @see String#replaceFirst(String, String) * @see java.util.regex.Pattern * @see java.util.regex.Pattern#DOTALL */ public static String replaceFirst(final String text, final String regex, final String replacement); Regards, -- Loic Guibert PGP : 0x65EB4F33 --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org