用正则表达式跳过评论

时间:2016-01-25 17:17:50

标签: regex comments

这已被问了很多次 - 但我不明白为什么以下负面的后视仍然匹配在评论字符“;”之后?!

   (?<!;).+mylib.*

Regular expression visualization

Debuggex Demo

TEST-TEXT:

;   /home/mylib/blabla/laydef1.rul (matches wrongly!?)

/home/mylib/blabla/laydef2.rul (matches as it should)

P.S。 RegEx类是PCRE

1 个答案:

答案 0 :(得分:1)

由于PCRE不支持可变长度的后视,你可以使用这个正则表达式构造:

/^\h*(?:;.*(*SKIP)(*F)|.*mylib.*)/m

RegEx Demo

您的正则表达式:(?<!;).+mylib.*失败,因为.+匹配; to mylib`中的所有内容

  • (*FAIL)表现得像一个失败的否定断言,是(?!)
  • 的同义词
  • (*SKIP)定义了一个点,当子模式稍后失败时,不允许正则表达式引擎回溯
  • (*SKIP)(*FAIL)一起提供了一个很好的限制替代方案,在上面的正则表达式中你不能有一个可变长度的lookbehind。