捕获组的负前瞻
Negative lookahead with capturing groups
我正在尝试这个挑战:
我想匹配所有不包含 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>
.
我正在尝试这个挑战:
我想匹配所有不包含 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>
.