我正在尝试这个挑战:
我希望匹配所有不包含ABBA模式的字符串。
匹配度:
aesthophysiology
amphimictical
baruria
calomorphic
不匹配
anallagmatic
bassarisk
chorioallantois
coccomyces
abba
首先,我有一个正则表达式来确定ABBA模式。
(\w)(\w)\2\1
接下来我想匹配不包含该模式的字符串:
^((?!(\w)(\w)\2\1).)*$
然而,这符合一切。
如果我通过为负前瞻指定文字来简化这一点:
^((?!agm).)*$
正则表达式与字符串“anallagmatic”不匹配,这是期望的行为。
所以看起来问题在于我在负向前瞻中使用捕获组和反向引用。
答案 0 :(得分:5)
^(?!.*(.)(.)\2\1).+$
^^
你可以在这里使用lookahead
。参见演示。你创建的前瞻是正确的,但你需要添加.*
,以便它不会出现在字符串中的任何地方。
https://regex101.com/r/vV1wW6/39
如果您创建第一组non capturing
,您的方法也会有用。
^(?:(?!(\w)(\w)\2\1).)*$
^^
请参阅demo.It无效,因为\2
\1
与您的意图不同。在正则表达式中,它们应该是\3
和\2
。