正则表达式使用前瞻的匹配未获得任何匹配

时间:2019-03-16 05:35:00

标签: c# regex

我有一个正则表达式

(iff (not #f) (or (and (implies #f #t) #t) #f))

上面的正则表达式应该获得匹配而不捕获模式强制结果

但是它没有获取任何匹配项

另一方面,当我使用它时无需先行

像这样

Regex.Matches(a, @"((?=.)\1+)")

它带来了比赛并且工作正常

我想知道为什么会这样,为什么提前不获取任何匹配项。

我的字符串是

 Regex.Matches(a, @"(.)\1+")

上方第二行显示

   "zaaaaaaashjasjaaasjabbbajsljlsccccasjahsddddd";

谢谢

1 个答案:

答案 0 :(得分:1)

前瞻既不消耗字符也不捕获字符。话说回来,第一个正则表达式中的向后引用\1表示未捕获任何内容,因此完全匹配失败(不一定在所有正则表达式中都是如此)。

当前瞻位于另一个捕获组中时,将应用相同的语句。前瞻性不消耗任何东西,因此捕获组不包含任何东西。

要捕获先行内容(通常是环顾四周)中的任何内容,请使用如下捕获组:

(?=(.))\1\1+

这就是您要尝试使用的第一个正则表达式。