具有负前瞻性的正则表达式仍然匹配

时间:2014-09-08 01:35:28

标签: regex

我正在尝试测试一个shebang“#!”使用此正则表达式(?!\/)#\!(?!\/)

查看它是否在任何一方都没有正斜杠

它应匹配: #!z#!#!zz#!z

匹配:/#!#!//#!/

我在shebang周围放了负面的前瞻,所以它不会匹配任何斜杠,实际上它与尾部斜杠不匹配,但由于某种原因它仍然匹配前导斜杠/#!

example on regexr

有关为何发生这种情况的原因/如何解决?

1 个答案:

答案 0 :(得分:2)

您想要使用Negative Lookbehind and Negative Lookahead的组合。

(?<!/)#!(?!/)

<强>解释

(?<!     # look behind to see if there is not:
  /      #   '/'
)        # end of look-behind
#!       # '#!'
(?!      # look ahead to see if there is not:
  /      #   '/'
)        # end of look-ahead