我有一个正则表达式
^.*\bfrost.*(?!flakes|snowman).*$
我正在针对以下几行进行测试:
frosted flakes
frosty snowman
frost, jack
请参见this Regex.101演示。
我只希望第三个表达式匹配,但所有三个表达式都匹配。
答案 0 :(得分:0)
您应将第二个.*
移至前行,例如
^.*\bfrost(?!.*(?:flakes|snowman)).*$
或
^.*\bfrost(?!.*flakes|.*snowman).*$
请参见regex demo
在原始正则表达式中,前行位于.*
之后,只要前行返回false,则正则表达式引擎就可以回溯并仍然以另一种方式匹配字符串,{{{ 1}}或snowman
。当您将flakes
放到前行中时,这两个单词不必立即出现在当前位置的右侧。