summaryrefslogtreecommitdiffstats
path: root/modules/regex
diff options
context:
space:
mode:
Diffstat (limited to 'modules/regex')
-rw-r--r--modules/regex/regex.cpp2
-rw-r--r--modules/regex/tests/test_regex.h12
2 files changed, 13 insertions, 1 deletions
diff --git a/modules/regex/regex.cpp b/modules/regex/regex.cpp
index d49578d2a9..4a1037431a 100644
--- a/modules/regex/regex.cpp
+++ b/modules/regex/regex.cpp
@@ -334,7 +334,7 @@ String RegEx::sub(const String &p_subject, const String &p_replacement, bool p_a
return String();
}
- return String(output.ptr(), olength);
+ return String(output.ptr(), olength) + p_subject.substr(length);
}
bool RegEx::is_valid() const {
diff --git a/modules/regex/tests/test_regex.h b/modules/regex/tests/test_regex.h
index 0b401da831..1c305f70f7 100644
--- a/modules/regex/tests/test_regex.h
+++ b/modules/regex/tests/test_regex.h
@@ -133,6 +133,18 @@ TEST_CASE("[RegEx] Substitution") {
RegEx re4("(a)(b){0}(c)");
REQUIRE(re4.is_valid());
CHECK(re4.sub(s4, "${1}.${3}.", true) == "a.c.a.c.a.c.");
+
+ const String s5 = "aaaa";
+
+ RegEx re5("a");
+ REQUIRE(re5.is_valid());
+ CHECK(re5.sub(s5, "b", true, 0, 2) == "bbaa");
+ CHECK(re5.sub(s5, "b", true, 1, 3) == "abba");
+ CHECK(re5.sub(s5, "b", true, 0, 0) == "aaaa");
+ CHECK(re5.sub(s5, "b", true, 1, 1) == "aaaa");
+ CHECK(re5.sub(s5, "cc", true, 0, 2) == "ccccaa");
+ CHECK(re5.sub(s5, "cc", true, 1, 3) == "acccca");
+ CHECK(re5.sub(s5, "", true, 0, 2) == "aa");
}
TEST_CASE("[RegEx] Substitution with empty input and/or replacement") {