@@ -184,6 +184,48 @@ TEST_CASE("[RegEx] Empty pattern") {
184184 CHECK (re.is_valid ());
185185}
186186
187+ TEST_CASE (" [RegEx] Complex Grouping" ) {
188+ const String test = " https://docs.godotengine.org/en/latest/contributing/" ;
189+
190+ // Ignored protocol in grouping.
191+ RegEx re (" ^(?:https?://)([a-zA-Z]{2,4})\\ .([a-zA-Z][a-zA-Z0-9_\\ -]{2,64})\\ .([a-zA-Z]{2,4})" );
192+ REQUIRE (re.is_valid ());
193+ Ref<RegExMatch> expr = re.search (test);
194+
195+ CHECK (expr->get_group_count () == 3 );
196+
197+ CHECK (expr->get_string (0 ) == " https://docs.godotengine.org" );
198+
199+ CHECK (expr->get_string (1 ) == " docs" );
200+ CHECK (expr->get_string (2 ) == " godotengine" );
201+ CHECK (expr->get_string (3 ) == " org" );
202+ }
203+
204+ TEST_CASE (" [RegEx] Number Expression" ) {
205+ const String test = " (2.5e-3 + 35 + 46) / 2.8e0 = 28.9294642857" ;
206+
207+ // Not an exact regex for number but a good test.
208+ RegEx re (" ([+-]?\\ d+)(\\ .\\ d+([eE][+-]?\\ d+)?)?" );
209+ REQUIRE (re.is_valid ());
210+ Array number_match = re.search_all (test);
211+
212+ CHECK (number_match.size () == 5 );
213+
214+ Ref<RegExMatch> number = number_match[0 ];
215+ CHECK (number->get_string (0 ) == " 2.5e-3" );
216+ CHECK (number->get_string (1 ) == " 2" );
217+ number = number_match[1 ];
218+ CHECK (number->get_string (0 ) == " 35" );
219+ number = number_match[2 ];
220+ CHECK (number->get_string (0 ) == " 46" );
221+ number = number_match[3 ];
222+ CHECK (number->get_string (0 ) == " 2.8e0" );
223+ number = number_match[4 ];
224+ CHECK (number->get_string (0 ) == " 28.9294642857" );
225+ CHECK (number->get_string (1 ) == " 28" );
226+ CHECK (number->get_string (2 ) == " .9294642857" );
227+ }
228+
187229TEST_CASE (" [RegEx] Invalid end position" ) {
188230 const String s = " Godot" ;
189231
0 commit comments