Iva*_*tov 8 regex regex-negation
我已经搜索了这样的问题,但是我发现的所有情况都是以特定于问题的方式解决的,例如在vi中使用!g来否定正则表达式匹配,或匹配其他内容,而不使用正则表达式否定.
因此,我对这个"纯粹"的解决方案感兴趣:
有一组字符串我需要使用正则表达式匹配器过滤它们,以便它只留下(匹配)缺少给定子字符串的字符串.例如,过滤掉"Foo":
Boo
Foo
Bar
FooBar
BooFooBar
Baz
Run Code Online (Sandbox Code Playgroud)
会导致:
Boo
Bar
Baz
Run Code Online (Sandbox Code Playgroud)
我试图用消极构建它的外观aheads /屁股(?!regex)/ (?<!regex),但不能弄明白.这甚至可能吗?
Gum*_*mbo 19
试试这个正则表达式:
^(?:(?!Foo).)*$
Run Code Online (Sandbox Code Playgroud)
这将一次消耗一个字符并测试前面是否没有Foo.使用否定的后视可以做同样的事情:
^(?:.(?<!Foo))*$
Run Code Online (Sandbox Code Playgroud)
但是你也可以做同样的事情而不用环顾四周的断言:
^(?:[^F]*|F(?:$|[^o].|o(?:$|[^o])))*$
Run Code Online (Sandbox Code Playgroud)
这匹配除了F或F之外的任何字符,其后面没有o或者后跟o后面跟着另一个o.