diff --git a/src/main/java/org/cobbzilla/util/io/regex/RegexReplacementFilter.java b/src/main/java/org/cobbzilla/util/io/regex/RegexReplacementFilter.java index 5298b9e..1296b97 100644 --- a/src/main/java/org/cobbzilla/util/io/regex/RegexReplacementFilter.java +++ b/src/main/java/org/cobbzilla/util/io/regex/RegexReplacementFilter.java @@ -48,10 +48,9 @@ public class RegexReplacementFilter implements RegexStreamFilter { // add everything before the group match result.append(buffer.subSequence(matcher.start(), matcher.start(group))); - // if the replacement starts with the special prefixReplacementWithMatch, insert the match before the replacement - if (replacement.startsWith(prefixReplacementWithMatch)) { - result.append(buffer.subSequence(matcher.start(group), matcher.end(group))); - result.append(replacement.substring(prefixReplacementWithMatch.length())); + // if the replacement contains prefixReplacementWithMatch, replace with the match + if (replacement.contains(prefixReplacementWithMatch)) { + result.append(replacement.replace(prefixReplacementWithMatch, buffer.subSequence(matcher.start(group), matcher.end(group)))); } else { // add the replacement result.append(replacement); diff --git a/src/test/java/org/cobbzilla/util/io/regex/RegexFilterReaderTest.java b/src/test/java/org/cobbzilla/util/io/regex/RegexFilterReaderTest.java index de0e663..eaf7c31 100644 --- a/src/test/java/org/cobbzilla/util/io/regex/RegexFilterReaderTest.java +++ b/src/test/java/org/cobbzilla/util/io/regex/RegexFilterReaderTest.java @@ -50,6 +50,18 @@ public class RegexFilterReaderTest { assertEquals("multi reader failed to get expected output", EXPECTED_STRING_INCLUDE_MATCH, result.toString()); } + public static final String TEST_STRING_INCLUDE_MATCH_MIDDLE = "\n\nsomething\n"; + public static final String EXPECTED_STRING_INCLUDE_MATCH_MIDDLE = "\nINSERTED_DATA\nsomething\n"; + + @Test public void testRegexReaderIncludeMatchInMiddle() throws Exception { + final Reader reader = new StringReader(TEST_STRING_INCLUDE_MATCH_MIDDLE); + final RegexStreamFilter regexStreamFilter = new RegexReplacementFilter("]*>", "INSERTED_!DATA"); + final RegexFilterReader regexFilterReader = new RegexFilterReader(reader, 1024, regexStreamFilter); + final StringWriter result = new StringWriter(); + IOUtils.copyLarge(regexFilterReader, result); + assertEquals("multi reader failed to get expected output", EXPECTED_STRING_INCLUDE_MATCH_MIDDLE, result.toString()); + } + public static final String MULTI_TEST_STRING_1 = "this is a multi-stream test string\nthat should has a lot of stuff"; public static final String MULTI_TEST_STRING_2 = "in it but why should that matter?\nit is a bad thing to have multiple streams?"; public static final String MULTI_TEST_STRING_3 = "maybe some people think so\nbut a good person would never say that";