这已被问了很多次 - 但我不明白为什么以下负面的后视仍然匹配在评论字符“;”之后?!
(?<!;).+mylib.*
TEST-TEXT:
; /home/mylib/blabla/laydef1.rul (matches wrongly!?)
/home/mylib/blabla/laydef2.rul (matches as it should)
P.S。 RegEx类是PCRE
答案 0 :(得分:1)
由于PCRE不支持可变长度的后视,你可以使用这个正则表达式构造:
/^\h*(?:;.*(*SKIP)(*F)|.*mylib.*)/m
您的正则表达式:(?<!;).+mylib.*
失败,因为.+
匹配; to
mylib`中的所有内容
(*FAIL)
表现得像一个失败的否定断言,是(?!)
(*SKIP)
定义了一个点,当子模式稍后失败时,不允许正则表达式引擎回溯(*SKIP)(*FAIL)
一起提供了一个很好的限制替代方案,在上面的正则表达式中你不能有一个可变长度的lookbehind。