我正在尝试这个挑战:
https://regex.alf.nu/4 https://regex.alf.nu/4
我想匹配所有不包含 ABBA 模式的字符串。
Match:
aesthophysiology
amphimictical
baruria
calomorphic
不匹配
anallagmatic
bassarisk
chorioallantois
coccomyces
abba
首先,我有一个正则表达式来确定 ABBA 模式。
(\w)(\w)\2\1
接下来我想匹配不包含该模式的字符串:
^((?!(\w)(\w)\2\1).)*$
然而这符合一切。
如果我通过指定负前瞻的文字来简化这一点:
^((?!agm).)*$
正则表达式与字符串“anallagmatic”不匹配,这是所需的行为。
所以看来问题出在我在否定前瞻中使用捕获组和反向引用。
^(?!.*(.)(.)\2\1).+$
^^
您可以使用lookahead
在这里。请参阅演示。您创建的前瞻是正确的,但您需要添加.*
以便它不能出现在字符串中的任何位置。
https://regex101.com/r/vV1wW6/39 https://regex101.com/r/vV1wW6/39
如果你是第一组,你的方法也会起作用non capturing
.
^(?:(?!(\w)(\w)\2\1).)*$
^^
查看演示。它不起作用,因为\2
\1
与您的预期不同。在您的正则表达式中,它们应该是\3
and \2
.
https://regex101.com/r/vV1wW6/40 https://regex101.com/r/vV1wW6/40
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)