给出内容:
hello bob
hello my name is bob
我正在尝试使用否定前瞻匹配hello bob
。正则表达式hello.*(?!my name is).*bob
匹配两行。正则表达式hello .*(?!my name is) .*bob
匹配第二行。
我怎样才能匹配第一行,为什么负面预测与它应该不匹配的行匹配?我做错了什么?
答案 0 :(得分:1)
负面前瞻之前的贪婪.*
是阻止它正常工作的原因。这是您正在寻找的匹配:
/hello (?!my name is).*bob/
或者,您可以直接将.*
置于否定断言中:
/hello(?!.*my name is).*bob/
这将使两人无法竞争。
答案 1 :(得分:1)
如果您只需要匹配第一件事,那么使用否定前瞻是过度的,所以这个正则表达式应该足够了:
^hello bob$
使用行锚(^
)的开头和行结束锚($
),只有hello bob
才能满足该正则表达式。