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";