@@ -93,9 +93,55 @@ public static IEnumerable<object[]> Match_MemberData()
93
93
yield return ( @"(?:(?!(b)b)\1a)*" , "babababa" , RegexOptions . None , 0 , 8 , true , string . Empty ) ;
94
94
yield return ( @"(.*?)a(?!(a+)b\2c)\2(.*)" , "baaabaac" , RegexOptions . None , 0 , 8 , false , string . Empty ) ;
95
95
yield return ( @"(?!(abc))+\w\w\w" , "abcdef" , RegexOptions . None , 0 , 6 , true , "bcd" ) ;
96
+ yield return ( @"a+(?!c)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
97
+ yield return ( @"a+(?!c)" , "aaac" , RegexOptions . None , 0 , 4 , true , "aa" ) ;
98
+ yield return ( @"a*(?!c)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
99
+ yield return ( @"a{2,5}(?!c)" , "aaaaac" , RegexOptions . None , 0 , 6 , true , "aaaa" ) ;
100
+ yield return ( @"a+?(?!c)" , "aaab" , RegexOptions . None , 0 , 4 , true , "a" ) ;
101
+ yield return ( @"a*?(?!c)" , "aaab" , RegexOptions . None , 0 , 4 , true , "" ) ;
102
+ yield return ( @"a{2,5}?(?!c)" , "aaaaab" , RegexOptions . None , 0 , 6 , true , "aa" ) ;
103
+ yield return ( @"[ab]*(?!x)" , "ababc" , RegexOptions . None , 0 , 5 , true , "abab" ) ;
104
+ yield return ( @"a+(?=b)(?!c)" , "aabx" , RegexOptions . None , 0 , 4 , true , "aa" ) ;
105
+ yield return ( @"a+?(?=b)(?!c)" , "aabx" , RegexOptions . None , 0 , 4 , true , "aa" ) ;
106
+
107
+ // Zero-width positive lookahead assertion
96
108
yield return ( @"(?=(abc))?\1" , "abc" , RegexOptions . None , 0 , 3 , true , "abc" ) ;
97
109
yield return ( @"(?=(abc))+\1" , "abc" , RegexOptions . None , 0 , 3 , true , "abc" ) ;
98
110
yield return ( @"(?=(abc))*\1" , "abc" , RegexOptions . None , 0 , 3 , true , "abc" ) ;
111
+ yield return ( @"^.*?(?=.)b" , "ab" , RegexOptions . None , 0 , 2 , true , "ab" ) ;
112
+ yield return ( @".*?(?=.)b" , "ab" , RegexOptions . None , 0 , 2 , true , "ab" ) ;
113
+ yield return ( @"^(?>.*?)(?=.)b" , "ab" , RegexOptions . None , 0 , 2 , false , "" ) ;
114
+ yield return ( @"(?>.*?)(?=.)b" , "ab" , RegexOptions . None , 0 , 2 , true , "b" ) ;
115
+ yield return ( @"a+(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
116
+ yield return ( @"a+(?=b)" , "aaabc" , RegexOptions . None , 0 , 5 , true , "aaa" ) ;
117
+ yield return ( @"a*(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
118
+ yield return ( @"a{2,5}(?=b)" , "aaaaab" , RegexOptions . None , 0 , 6 , true , "aaaaa" ) ;
119
+ yield return ( @"a+?(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
120
+ yield return ( @"a*?(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
121
+ yield return ( @"a{2,5}?(?=b)" , "aaaaab" , RegexOptions . None , 0 , 6 , true , "aaaaa" ) ;
122
+ yield return ( @"a+b+(?=c)" , "aabbbc" , RegexOptions . None , 0 , 6 , true , "aabbb" ) ;
123
+ yield return ( @"a+?b+(?=c)" , "aabbbc" , RegexOptions . None , 0 , 6 , true , "aabbb" ) ;
124
+ yield return ( @"a+b+?(?=c)" , "aabbbc" , RegexOptions . None , 0 , 6 , true , "aabbb" ) ;
125
+ yield return ( @"[ab]+(?=c)" , "ababc" , RegexOptions . None , 0 , 5 , true , "abab" ) ;
126
+ yield return ( @"[ab]+?(?=c)" , "ababc" , RegexOptions . None , 0 , 5 , true , "abab" ) ;
127
+ yield return ( @"\w+(?=\b)" , "hello world" , RegexOptions . None , 0 , 11 , true , "hello" ) ;
128
+ yield return ( @"\w+?(?=\b)" , "hello world" , RegexOptions . None , 0 , 11 , true , "hello" ) ;
129
+ yield return ( @"(?>a+)(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
130
+ yield return ( @"(?>a*)(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
131
+ yield return ( @"(?>a{2,5})(?=b)" , "aaaaab" , RegexOptions . None , 0 , 6 , true , "aaaaa" ) ;
132
+ yield return ( @"a*(?=a)" , "aaa" , RegexOptions . None , 0 , 3 , true , "aa" ) ;
133
+ yield return ( @"a*?(?=a)" , "aaa" , RegexOptions . None , 0 , 3 , true , "" ) ;
134
+ yield return ( @"a+(?=a*b)ab" , "aaaab" , RegexOptions . None , 0 , 5 , true , "aaaab" ) ;
135
+ yield return ( @"a+?(?=a*b)ab" , "aaaab" , RegexOptions . None , 0 , 5 , true , "aaaab" ) ;
136
+ yield return ( @"(a+)+(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
137
+ yield return ( @"(a+?)+(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
138
+ yield return ( @"(a+)+?(?=b)" , "aaab" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
139
+ yield return ( @"(a+|b+)(?=c)" , "aaac" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
140
+ yield return ( @"(a+?|b+?)(?=c)" , "aaac" , RegexOptions . None , 0 , 4 , true , "aaa" ) ;
141
+ yield return ( @"(a+)(?=\1b)" , "aaaaaab" , RegexOptions . None , 0 , 7 , true , "aaa" ) ;
142
+ yield return ( @"(a+?)(?=\1b)" , "aaaaaab" , RegexOptions . None , 0 , 7 , true , "aaa" ) ;
143
+ yield return ( @"[A-Z]+(?=b)" , "AAAb" , RegexOptions . IgnoreCase , 0 , 4 , true , "AAA" ) ;
144
+ yield return ( @"[A-Z]+?(?=b)" , "AAAb" , RegexOptions . IgnoreCase , 0 , 4 , true , "AAA" ) ;
99
145
100
146
// Zero-width positive lookbehind assertion
101
147
yield return ( @"(\w){6}(?<=XXX)def" , "abcXXXdef" , RegexOptions . None , 0 , 9 , true , "abcXXXdef" ) ;
@@ -136,13 +182,21 @@ public static IEnumerable<object[]> Match_MemberData()
136
182
yield return ( @"(?<=(abc)+?)" , "123abc" , RegexOptions . None , 0 , 6 , true , "" ) ;
137
183
yield return ( @"(?<=(abc)+?)" , "123ab" , RegexOptions . None , 0 , 5 , false , "" ) ;
138
184
yield return ( @"(?<=(abc)+?123)" , "abcabc123" , RegexOptions . None , 0 , 9 , true , "" ) ;
185
+ yield return ( @"a+(?!c)(?<=y)" , "yaab" , RegexOptions . None , 0 , 4 , false , "" ) ;
186
+ yield return ( @"(?<=a{2,4})b+" , "aaabbb" , RegexOptions . None , 0 , 6 , true , "bbb" ) ;
187
+ yield return ( @"(?<=a+)b+?" , "aaabbb" , RegexOptions . None , 0 , 6 , true , "b" ) ;
139
188
140
189
// Zero-width negative lookbehind assertion: Actual - "(\\w){6}(?<!XXX)def"
141
190
yield return ( @"(\w){6}(?<!XXX)def" , "XXXabcdef" , RegexOptions . None , 0 , 9 , true , "XXXabcdef" ) ;
142
191
yield return ( @"123(?<!$) abcdef" , "123 abcdef" , RegexOptions . None , 0 , 10 , true , "123 abcdef" ) ;
143
192
yield return ( @"(abc)\w(?<!(?(1)e|d))" , "abcdabc" , RegexOptions . None , 0 , 7 , true , "abcd" ) ;
144
193
yield return ( @"(abc)\w(?<!(?(cd)e|d))" , "abcdabc" , RegexOptions . None , 0 , 7 , true , "abcd" ) ;
145
194
yield return ( @"(?<!(b)a)\1" , "bb" , RegexOptions . None , 0 , 2 , false , string . Empty ) ; // negative assertion should not capture
195
+ yield return ( @"(?<=a)b+c" , "abbbbc" , RegexOptions . None , 0 , 6 , true , "bbbbc" ) ;
196
+ yield return ( @"(?<=a+)bc" , "aaabc" , RegexOptions . None , 0 , 5 , true , "bc" ) ;
197
+ yield return ( @"(?<!x)a+b" , "yaab" , RegexOptions . None , 0 , 4 , true , "aab" ) ;
198
+ yield return ( @"(?<!x)a+b" , "xaab" , RegexOptions . None , 0 , 4 , true , "ab" ) ;
199
+ yield return ( @"a+(?=b)(?<!x)" , "yaab" , RegexOptions . None , 0 , 4 , true , "aa" ) ;
146
200
147
201
// Nonbacktracking subexpression: Actual - "[^0-9]+(?>[0-9]+)3"
148
202
// The last 3 causes the match to fail, since the non backtracking subexpression does not give up the last digit it matched
0 commit comments