Getting Started > ASP.NET Base Types > Regular Expressions > Details of Regular Expression Behavior > Quantifiers and Empty Matches
Getting Started ASP.NET Base Types Details of Regular Expression Behavior
Quantifiers *, +, {n,m} ( and their lazy counterparts ) never repeat after an empty match when the minimum number n has been matched. This rule prevents quantifiers from entering infinite loops on empty matches when m is infinite ( although the rule applies even if m is not infinite ).
For example, ( a? ) * matches the string "aaa" and captures substrings in the pattern ( a ) ( a ) ( a ) ( ). Note that there is no fifth empty capture, because the fourth empty capture causes the quantifier to stop repeating.
Similarly, ( a\1| ( ? ( 1 ) \1 ) ) {0,2} matches the empty string rather than "a" because it never tries the expansion ( ) ( a ). The {0,2} quantifier allows only empty matches in the last iteration. In contrast, ( a\1| ( ? ( 1 ) \1 ) ) {2} actually matches "a" because it does try ( ) ( a ) since the minimum number of iterations, 2, forces the engine to repeat after an empty match.
Regular Expressions