使用lookahead的Regex.Matches没有得到任何匹配

问题描述 投票:0回答:1

我有一个正则表达式

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

上面的正则表达式应该在没有捕获模式强制结果的情况下获得匹配

但它不会取任何匹配

另一方面,当我使用它没有前瞻

像这样

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

它带来了比赛和工作正常

我想知道为什么会这样,为什么前瞻不要拿任何比赛。

我的字符串是

   "zaaaaaaashjasjaaasjabbbajsljlsccccasjahsddddd";

上面的第二行带来了

  [aaaaaaa],[aaa],...

谢谢

c# regex
1个回答
1
投票

前瞻既不消耗品质也不捕捉它。说,第一个正则表达式中的反向引用\1指的是尚未捕获的任何内容,并使总匹配失败(这在所有正则表达式中都不一定正确)。

当前瞻是在另一个捕获组中时,相同的语句适用。 Lookahead不会消耗任何东西,因此捕获组不会保留任何东西。

要捕获一切都在前瞻(通常看起来像)中的内容,请使用这样的捕获组:

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

这就是你想用第一个正则表达式说的话。

© www.soinside.com 2019 - 2024. All rights reserved.