捕获组的负前瞻

Negative lookahead with capturing groups

我正在尝试这个挑战:

https://regex.alf.nu/4

我想匹配所有不包含 ABBA 模式的字符串。

匹配:

aesthophysiology
amphimictical
baruria
calomorphic

不匹配

anallagmatic
bassarisk
chorioallantois
coccomyces
abba

首先,我有一个正则表达式来确定 ABBA 模式。

(\w)(\w)

接下来我要匹配不包含该模式的字符串:

^((?!(\w)(\w)).)*$

然而这匹配所有内容。

如果我通过为否定前瞻指定一个文字来简化它:

^((?!agm).)*$

正则表达式与字符串 "anallagmatic" 不匹配,这是所需的行为。

所以看起来问题出在我使用捕获组和负前瞻中的反向引用。

^(?!.*(.)(.)).+$

    ^^

您可以使用 lookahead here.See demo.The 您创建的前瞻是正确的,但您需要添加 .* 以便它不会出现在字符串中的任何位置。

https://regex101.com/r/vV1wW6/39

如果您将第一组设为 non capturing,您的方法也将奏效。

^(?:(?!(\w)(\w)).)*$

 ^^

请参阅 demo.It 无法正常工作,因为 </code> <code> 与您 intended.In 不同,您的正则表达式应该是 </code> 和 <code>.

https://regex101.com/r/vV1wW6/40