消极的前瞻似乎与它不应该的东西相匹配

时间:2014-11-28 20:41:19

标签: regex

给出内容:

hello bob
hello my name is bob

我正在尝试使用否定前瞻匹配hello bob。正则表达式hello.*(?!my name is).*bob匹配两行。正则表达式hello .*(?!my name is) .*bob匹配第二行。

我怎样才能匹配第一行,为什么负面预测与它应该不匹配的行匹配?我做错了什么?

2 个答案:

答案 0 :(得分:1)

负面前瞻之前的贪婪.*是阻止它正常工作的原因。这是您正在寻找的匹配:

/hello (?!my name is).*bob/

或者,您可以直接将.*置于否定断言中:

/hello(?!.*my name is).*bob/

这将使两人无法竞争。

答案 1 :(得分:1)

如果您只需要匹配第一件事,那么使用否定前瞻是过度的,所以这个正则表达式应该足够了:

^hello bob$

使用行锚(^)的开头和行结束锚($),只有hello bob才能满足该正则表达式。