使用正则表达式跳过评论
skipping comments with regex
这个问题已经被问过很多次了——但我不明白为什么下面的负面回顾 仍然匹配 在注释字符“;”之后?!
(?<!;).+mylib.*
测试文本:
; /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
您的正则表达式:(?<!;).+mylib.*
失败,因为 .+
匹配 ; to
mylib`
中的所有内容
(*FAIL)
表现得像一个失败的否定断言,是 (?!)
的同义词
(*SKIP)
定义一个点,当子模式稍后失败时,正则表达式引擎不允许回溯超过该点
(*SKIP)(*FAIL)
一起提供了一个很好的限制替代方案,你不能在上面的正则表达式中有可变长度的回顾。
这个问题已经被问过很多次了——但我不明白为什么下面的负面回顾 仍然匹配 在注释字符“;”之后?!
(?<!;).+mylib.*
测试文本:
; /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
您的正则表达式:(?<!;).+mylib.*
失败,因为 .+
匹配 ; to
mylib`
(*FAIL)
表现得像一个失败的否定断言,是(?!)
的同义词
(*SKIP)
定义一个点,当子模式稍后失败时,正则表达式引擎不允许回溯超过该点(*SKIP)(*FAIL)
一起提供了一个很好的限制替代方案,你不能在上面的正则表达式中有可变长度的回顾。