我有一个正则表达式
(iff (not #f) (or (and (implies #f #t) #t) #f))
上面的正则表达式应该获得匹配而不捕获模式强制结果
但是它没有获取任何匹配项
另一方面,当我使用它时无需先行
像这样
Regex.Matches(a, @"((?=.)\1+)")
它带来了比赛并且工作正常
我想知道为什么会这样,为什么提前不获取任何匹配项。
我的字符串是
Regex.Matches(a, @"(.)\1+")
上方第二行显示
"zaaaaaaashjasjaaasjabbbajsljlsccccasjahsddddd";
谢谢
答案 0 :(得分:1)
前瞻既不消耗字符也不捕获字符。话说回来,第一个正则表达式中的向后引用\1
表示未捕获任何内容,因此完全匹配失败(不一定在所有正则表达式中都是如此)。
当前瞻位于另一个捕获组中时,将应用相同的语句。前瞻性不消耗任何东西,因此捕获组不包含任何东西。
要捕获先行内容(通常是环顾四周)中的任何内容,请使用如下捕获组:
(?=(.))\1\1+
这就是您要尝试使用的第一个正则表达式。