Author: ggregory Date: Tue Oct 9 22:07:08 2012 New Revision: 1396375 URL: http://svn.apache.org/viewvc?rev=1396375&view=rev Log: [LANG-841] Add StringUtils API to call String.replaceAll in DOTALL a.k.a. single-line mode.
Modified: commons/proper/lang/trunk/src/changes/changes.xml commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java Modified: commons/proper/lang/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/changes/changes.xml?rev=1396375&r1=1396374&r2=1396375&view=diff ============================================================================== --- commons/proper/lang/trunk/src/changes/changes.xml (original) +++ commons/proper/lang/trunk/src/changes/changes.xml Tue Oct 9 22:07:08 2012 @@ -23,6 +23,7 @@ <release version="3.2" date="TBA" description="Next release"> <action issue="LANG-844" type="fix">Fix examples contained in javadoc of StringUtils.center methods</action> + <action issue="LANG-841" type="add">Add StringUtils API to call String.replaceAll in DOTALL a.k.a. single-line mode</action> <action issue="LANG-839" type="update">ArrayUtils removeElements methods use unnecessary HashSet</action> <action issue="LANG-838" type="update">ArrayUtils removeElements methods clone temporary index arrays unnecessarily</action> <action issue="LANG-832" type="fix">FastDateParser does not handle unterminated quotes correctly</action> Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java?rev=1396375&r1=1396374&r2=1396375&view=diff ============================================================================== --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java Tue Oct 9 22:07:08 2012 @@ -3699,6 +3699,46 @@ public class StringUtils { } /** + * Replaces each substring of the source String that matches the given regular expression with the given + * replacement using the {@link Pattern#DOTALL} option. DOTALL is also know as single-line mode in Perl. This call + * is also equivalent to: + * <ul> + * <li>{@code source.replaceAll("(?s)" + regex, replacement)}</li> + * <li>{@code Pattern.compile(regex, Pattern.DOTALL).matcher(source).replaceAll(replacement)}</li> + * </ul> + * + * @param source + * the source string + * @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 resulting {@code String} + * @see String#replaceAll(String, String) + * @see Pattern#DOTALL + * @since 3.2 + */ + public static String replacePattern(String source, String regex, String replacement) { + return Pattern.compile(regex, Pattern.DOTALL).matcher(source).replaceAll(replacement); + } + + /** + * Removes each substring of the source String that matches the given regular expression using the DOTALL option. + * + * @param source + * the source string + * @param regex + * the regular expression to which this string is to be matched + * @return The resulting {@code String} + * @see String#replaceAll(String, String) + * @see Pattern#DOTALL + * @since 3.2 + */ + public static String removePattern(String source, String regex) { + return replacePattern(source, regex, StringUtils.EMPTY); + } + + /** * <p>Replaces all occurrences of a String within another String.</p> * * <p>A {@code null} reference passed to this method is a no-op.</p> Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java?rev=1396375&r1=1396374&r2=1396375&view=diff ============================================================================== --- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java (original) +++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java Tue Oct 9 22:07:08 2012 @@ -988,6 +988,16 @@ public class StringUtilsTest { } @Test + public void testReplacePattern() { + assertEquals("X", StringUtils.replacePattern("<A>\nxy\n</A>", "<A>.*</A>", "X")); + } + + @Test + public void testRemovePattern() { + assertEquals("", StringUtils.removePattern("<A>x\\ny</A>", "<A>.*</A>")); + } + + @Test public void testReplace_StringStringStringInt() { assertEquals(null, StringUtils.replace(null, null, null, 2)); assertEquals(null, StringUtils.replace(null, null, "any", 2));