diff options
| author | Zher Huei Lee | 2017-11-11 08:07:50 +0800 |
|---|---|---|
| committer | Zher Huei Lee | 2017-11-14 13:04:25 +0800 |
| commit | 2eba585d38d29b9ee31f8132fca912d0f26d8154 (patch) | |
| tree | db4c4e0baa601914e055dfe1e052294c544625b5 /modules/regex | |
| parent | 4c000a05f6275ae7b539927d4a2608cb54e34308 (diff) | |
| download | godot-2eba585d38d29b9ee31f8132fca912d0f26d8154.tar.gz godot-2eba585d38d29b9ee31f8132fca912d0f26d8154.tar.zst godot-2eba585d38d29b9ee31f8132fca912d0f26d8154.zip | |
Diffstat (limited to 'modules/regex')
| -rw-r--r-- | modules/regex/regex.cpp | 16 | ||||
| -rw-r--r-- | modules/regex/regex.h | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/modules/regex/regex.cpp b/modules/regex/regex.cpp index 00e8ce0f5..daadfcc65 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); diff --git a/modules/regex/regex.h b/modules/regex/regex.h index bfa9c8404..21387222f 100644 --- a/modules/regex/regex.h +++ b/modules/regex/regex.h @@ -88,6 +88,7 @@ public: void _init(const String &p_pattern = ""); Ref<RegExMatch> search(const String &p_subject, int p_offset = 0, int p_end = -1) const; + Array search_all(const String &p_subject, int p_offset = 0, int p_end = -1) const; String sub(const String &p_subject, const String &p_replacement, bool p_all = false, int p_offset = 0, int p_end = -1) const; bool is_valid() const; |
