@@ -582,6 +582,39 @@ public static IEnumerable<object[]> Groups_Basic_TestData()
582
582
yield return new object [ ] { null , @"([a-z]*)([\w])" , "cat" , RegexOptions . IgnoreCase , new string [ ] { "cat" , "ca" , "t" } } ;
583
583
yield return new object [ ] { null , @"^([a-z]*)([\w])$" , "cat" , RegexOptions . IgnoreCase , new string [ ] { "cat" , "ca" , "t" } } ;
584
584
585
+ // Backtracking with multiple (.*) groups -- important ASP.NET scenario
586
+ yield return new object [ ] { null , @"(.*)/(.*).aspx" , "/.aspx" , RegexOptions . None , new string [ ] { "/.aspx" , string . Empty , string . Empty } } ;
587
+ yield return new object [ ] { null , @"(.*)/(.*).aspx" , "/homepage.aspx" , RegexOptions . None , new string [ ] { "/homepage.aspx" , string . Empty , "homepage" } } ;
588
+ yield return new object [ ] { null , @"(.*)/(.*).aspx" , "pages/.aspx" , RegexOptions . None , new string [ ] { "pages/.aspx" , "pages" , string . Empty } } ;
589
+ yield return new object [ ] { null , @"(.*)/(.*).aspx" , "pages/homepage.aspx" , RegexOptions . None , new string [ ] { "pages/homepage.aspx" , "pages" , "homepage" } } ;
590
+ yield return new object [ ] { null , @"(.*)/(.*).aspx" , "/pages/homepage.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx" , "/pages" , "homepage" } } ;
591
+ yield return new object [ ] { null , @"(.*)/(.*).aspx" , "/pages/homepage/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage/index.aspx" , "/pages/homepage" , "index" } } ;
592
+ yield return new object [ ] { null , @"(.*)/(.*).aspx" , "/pages/homepage.aspx/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx/index.aspx" , "/pages/homepage.aspx" , "index" } } ;
593
+ yield return new object [ ] { null , @"(.*)/(.*)/(.*).aspx" , "/pages/homepage.aspx/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx/index.aspx" , "/pages" , "homepage.aspx" , "index" } } ;
594
+
595
+ // Backtracking with multiple (.+) groups
596
+ yield return new object [ ] { null , @"(.+)/(.+).aspx" , "pages/homepage.aspx" , RegexOptions . None , new string [ ] { "pages/homepage.aspx" , "pages" , "homepage" } } ;
597
+ yield return new object [ ] { null , @"(.+)/(.+).aspx" , "/pages/homepage.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx" , "/pages" , "homepage" } } ;
598
+ yield return new object [ ] { null , @"(.+)/(.+).aspx" , "/pages/homepage/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage/index.aspx" , "/pages/homepage" , "index" } } ;
599
+ yield return new object [ ] { null , @"(.+)/(.+).aspx" , "/pages/homepage.aspx/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx/index.aspx" , "/pages/homepage.aspx" , "index" } } ;
600
+ yield return new object [ ] { null , @"(.+)/(.+)/(.+).aspx" , "/pages/homepage.aspx/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx/index.aspx" , "/pages" , "homepage.aspx" , "index" } } ;
601
+
602
+ // Backtracking with (.+) group followed by (.*)
603
+ yield return new object [ ] { null , @"(.+)/(.*).aspx" , "pages/.aspx" , RegexOptions . None , new string [ ] { "pages/.aspx" , "pages" , string . Empty } } ;
604
+ yield return new object [ ] { null , @"(.+)/(.*).aspx" , "pages/homepage.aspx" , RegexOptions . None , new string [ ] { "pages/homepage.aspx" , "pages" , "homepage" } } ;
605
+ yield return new object [ ] { null , @"(.+)/(.*).aspx" , "/pages/homepage.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx" , "/pages" , "homepage" } } ;
606
+ yield return new object [ ] { null , @"(.+)/(.*).aspx" , "/pages/homepage/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage/index.aspx" , "/pages/homepage" , "index" } } ;
607
+ yield return new object [ ] { null , @"(.+)/(.*).aspx" , "/pages/homepage.aspx/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx/index.aspx" , "/pages/homepage.aspx" , "index" } } ;
608
+ yield return new object [ ] { null , @"(.+)/(.*)/(.*).aspx" , "/pages/homepage.aspx/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx/index.aspx" , "/pages" , "homepage.aspx" , "index" } } ;
609
+
610
+ // Backtracking with (.*) group followed by (.+)
611
+ yield return new object [ ] { null , @"(.*)/(.+).aspx" , "/homepage.aspx" , RegexOptions . None , new string [ ] { "/homepage.aspx" , string . Empty , "homepage" } } ;
612
+ yield return new object [ ] { null , @"(.*)/(.+).aspx" , "pages/homepage.aspx" , RegexOptions . None , new string [ ] { "pages/homepage.aspx" , "pages" , "homepage" } } ;
613
+ yield return new object [ ] { null , @"(.*)/(.+).aspx" , "/pages/homepage.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx" , "/pages" , "homepage" } } ;
614
+ yield return new object [ ] { null , @"(.*)/(.+).aspx" , "/pages/homepage/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage/index.aspx" , "/pages/homepage" , "index" } } ;
615
+ yield return new object [ ] { null , @"(.*)/(.+).aspx" , "/pages/homepage.aspx/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx/index.aspx" , "/pages/homepage.aspx" , "index" } } ;
616
+ yield return new object [ ] { null , @"(.*)/(.+)/(.+).aspx" , "/pages/homepage.aspx/index.aspx" , RegexOptions . None , new string [ ] { "/pages/homepage.aspx/index.aspx" , "/pages" , "homepage.aspx" , "index" } } ;
617
+
585
618
// Quantifiers
586
619
yield return new object [ ] { null , @"a*" , "" , RegexOptions . None , new string [ ] { "" } } ;
587
620
yield return new object [ ] { null , @"a*" , "a" , RegexOptions . None , new string [ ] { "a" } } ;
0 commit comments