【发布时间】:2020-03-09 22:18:08
【问题描述】:
我正在使用PCRE 在以下正则表达式的帮助下匹配异常日志。
正则表达式
\[([\d -:]+)\]ERROR.*?(F:[^ ]+|F:).*?(?sx).*?(\b[a-zA-Z]*Exception\b)
异常日志示例
-
捕获的异常在日志语句的内联(在一行中)
[2020-03-07 01:02:37.512]ERROR [L:xx F:yy T:zz R: C: ] xxxxxxx xxxxx xxxx xxxx NullPointerException at com.package.name(b.java:20) at com.package.name.someClass.someMethod(P.java:2423) at com.package.name.someClass.someMethod(P.java:40) at com.package.name.someClass.someMethod(P.java:4054) -
捕获的异常在任何其他下一个日志语句中
[2020-03-07 01:02:37.512]ERROR [L:xx F:yy T:zz R: C: ] xxxxxxx xxxxx xxxx xxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxxxxx xxxxxxxx xxxx xxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx xxxx NullPointerException at com.package.name(b.java:20) at com.package.name.someClass.someMethod(P.java:2423) at com.package.name.someClass.someMethod(P.java:40) at com.package.name.someClass.someMethod(P.java:4054)
第二个样本与上述正则表达式不匹配。
我也尝试使用multi-line flag (\m),但它不会因为它不应该匹配任何东西而停止
示例
[2020-03-07 01:02:37.512]ERROR [L:xx F:yy1 T:zz1 R: C: ] xxxxxxx xxxxx xxxx xxxx
[2020-03-07 01:03:37.512]ERROR [L:xx F:yy2 T:zz2 R: C: ] xxxxxxx xxxxx xxxx xxxx
[2020-03-07 01:04:37.512]ERROR [L:xx F:yy3 T:zz3 R: C: ] xxxxxxx xxxxx xxxx xxxx
[2020-03-07 01:05:37.512]ERROR [L:xx F:yy4 T:zz5 R: C: ] NullPointerException
at com.package.name(b.java:20)
at com.package.name.someClass.someMethod(P.java:2423)
at com.package.name.someClass.someMethod(P.java:40)
at com.package.name.someClass.someMethod(P.java:4054)
预期结果
第一组:2020-03-07 01:05:37.512, 第 2 组:F:yy4, 第 3 组:NullPointerException
实际结果
第一组:2020-03-07 01:02:37.512 第 2 组:F:yy1 第 3 组:NullPointerException
看看匹配第一行后它是如何在找到完整的表达式之前停止的。
谁能帮帮我。
【问题讨论】:
标签: regex parsing logging pcre