使用正则表达式跳过评论

skipping comments with regex

这个问题已经被问过很多次了——但我不明白为什么下面的负面回顾 仍然匹配 在注释字符“;”之后?!

   (?<!;).+mylib.*

Debuggex Demo

测试文本:

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

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

P.S。正则表达式 class 是 PCRE

由于 PCRE 不支持可变长度后视,您可以使用此正则表达式结构:

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

RegEx Demo

您的正则表达式:(?<!;).+mylib.* 失败,因为 .+ 匹配 ; tomylib`

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