正则表达式负向后查找多个值

Sha*_*ica 6 regex

我想在我的日志中搜索异常情况。启动正则表达式:

\wException\b
Run Code Online (Sandbox Code Playgroud)

\w这样我可以捕获异常的名称,例如 InvalidOperationException,而不仅仅是“异常”一词,并且可以\b排除其他形式的异常,例如“SomeExceptionHandler”。)

这很有效,但我发现一个异常频繁出现,但我对此不感兴趣;我们就这么称呼它吧FooException。我更改了我的正则表达式以包含负面的lookbehind:

\w(?<!Foo)Exception\b
Run Code Online (Sandbox Code Playgroud)

太好了,现在“FooException”已被排除。现在我发现这BarException也产生了很多噪音,我也想排除它。所以我想我应该在lookbehind中尝试一个管道:

\w(?<!(Foo|Bar))Exception\b
Run Code Online (Sandbox Code Playgroud)

...但这被拒绝作为无效的正则表达式。

那么,如何在lookbehind中排除多个字符串呢?

Kob*_*obi 13

您没有提到您正在使用哪个工具,但它很可能会拒绝您的模式,因为大多数正则表达式风格不支持可变长度后向查找。
一个简单的解决方法是进行多个后视:

\w(?<!Foo)(?<!Bar)Exception\b
Run Code Online (Sandbox Code Playgroud)

您还可以匹配完整的异常:

\b(?!Foo|Bar)\w+Exception\b
Run Code Online (Sandbox Code Playgroud)