diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2017-11-14 12:29:22 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-14 12:29:22 +0100 |
commit | f83b73be132d0e75272fd47899bc2d24d1285a39 (patch) | |
tree | 5e07bf597e2a782e427bb33e3959c7c1f0d07aee /modules/regex/regex.cpp | |
parent | bd775aa0bd25eaa331952c8cdaf0cabb66cbc213 (diff) | |
parent | 2eba585d38d29b9ee31f8132fca912d0f26d8154 (diff) | |
download | redot-engine-f83b73be132d0e75272fd47899bc2d24d1285a39.tar.gz |
Merge pull request #12915 from leezh/regex_search_all
Added RegEx.search_all() for multiple matches
Diffstat (limited to 'modules/regex/regex.cpp')
-rw-r--r-- | modules/regex/regex.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/modules/regex/regex.cpp b/modules/regex/regex.cpp index 00e8ce0f54..daadfcc659 100644 --- a/modules/regex/regex.cpp +++ b/modules/regex/regex.cpp @@ -324,6 +324,21 @@ Ref<RegExMatch> RegEx::search(const String &p_subject, int p_offset, int p_end) return result; } +Array RegEx::search_all(const String &p_subject, int p_offset, int p_end) const { + + int last_end = -1; + Array result; + Ref<RegExMatch> match = search(p_subject, p_offset, p_end); + while (match.is_valid()) { + if (last_end == match->get_end(0)) + break; + result.push_back(match); + last_end = match->get_end(0); + match = search(p_subject, match->get_end(0), p_end); + } + return result; +} + String RegEx::sub(const String &p_subject, const String &p_replacement, bool p_all, int p_offset, int p_end) const { ERR_FAIL_COND_V(!is_valid(), String()); @@ -489,6 +504,7 @@ void RegEx::_bind_methods() { ClassDB::bind_method(D_METHOD("clear"), &RegEx::clear); ClassDB::bind_method(D_METHOD("compile", "pattern"), &RegEx::compile); ClassDB::bind_method(D_METHOD("search", "subject", "offset", "end"), &RegEx::search, DEFVAL(0), DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("search_all", "subject", "offset", "end"), &RegEx::search_all, DEFVAL(0), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("sub", "subject", "replacement", "all", "offset", "end"), &RegEx::sub, DEFVAL(false), DEFVAL(0), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("is_valid"), &RegEx::is_valid); ClassDB::bind_method(D_METHOD("get_pattern"), &RegEx::get_pattern); |