我有一个正则表达式
Regex.Matches(a, @"((?=.)\1+)")
上面的正则表达式应该在没有捕获模式强制结果的情况下获得匹配
但它不会取任何匹配
另一方面,当我使用它没有前瞻
像这样
Regex.Matches(a, @"(.)\1+")
它带来了比赛和工作正常
我想知道为什么会这样,为什么前瞻不要拿任何比赛。
我的字符串是
"zaaaaaaashjasjaaasjabbbajsljlsccccasjahsddddd";
上面的第二行带来了
[aaaaaaa],[aaa],...
谢谢
前瞻既不消耗品质也不捕捉它。说,第一个正则表达式中的反向引用\1
指的是尚未捕获的任何内容,并使总匹配失败(这在所有正则表达式中都不一定正确)。
当前瞻是在另一个捕获组中时,相同的语句适用。 Lookahead不会消耗任何东西,因此捕获组不会保留任何东西。
要捕获一切都在前瞻(通常看起来像)中的内容,请使用这样的捕获组:
(?=(.))\1\1+
这就是你想用第一个正则表达式说的话。