正则表达式以匹配除某些特定行以外的所有日志

时间:2018-09-04 19:37:42

标签: regex perl

假设我有以下例外情况:

E 180822 133447.332 [pool-9982-thread-1] verylongfoo 
java.lang.NullPointerException

我需要的是仅匹配那些包含java.lang.NullPointerException但缺少verylongfoo部分的异常。 它应该只是与Perl 5兼容的正则表达式,而不是用Perl编写的程序

我尝试过类似的事情

.*(?<!verylongfoo)[\s]java\.lang\.NullPointerException

还有这个

(?!verylongfoo).*\sjava\.lang\.NullPointerException

但都不起作用。

后向匹配项与不需要的部分匹配时,它只是从其第二个字母开始匹配。

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

您的正则表达式很接近,只需将其锚定到行的开头,然后负向前瞻,则需要使用.*来允许verylongfoo位于字符串中的任意位置:

^(?!.*verylongfoo).*\sjava\.lang\.NullPointerException

具有单行和多行字符串的Regex101演示程序为here