2016-11-21 75 views
2

我想从日志文件捕获Java异常风险,但我想排除“由...引起:”字符串使用Oniguruma正则表达式版本6.0.0正则表达式java异常排除“导致:”

^.+Exception 

回报:

"Caused by: java.nio.file.NoSuchFileException" 

我如何可以写一个正则表达式捕获该异常名称,但忽略了“产生的原因:”在它前面的字符串。这将在神交Logstash使用

+0

又是怎么回事'^(*产生的原因:?!)+ Exception'?它应该工作。 –

+0

不能正常工作,请在http://rubular.com/r/JFI3pukx4y上测试 – Arturski

+0

它正在工作,因为它与您所写的*引起的行不匹配:*我试图捕获Java异常没有“引起来的:”字符串*的日志文件。如果不是你真的在做什么,请更新问题。 –

回答

1

您可以使用捕捉有以下模式:

^Caused\s*by:\s*(?<exception>[\w.]+) 

命名捕获组的(?<exception>[\w.]+)捕获匹配和成组“异常”(创建与变量相同的名称)1+字(字母,数字或下划线)或.字符。

回答你的问题,检查和需要的东西,但在比赛中排除,您可以使用lookarounds:

(?<=^Caused by:).*?Exception 

this Rubular demo。以下是https://grokdebug.herokuapp.com/测试:

enter image description here

+0

嗨Wiktor感谢您的解决方案!我在grok调试器中生成了2个值,出于某种原因,出现和不出现由字符串引起的值。 { “异常”: [ “产生的原因:java.nio.file.NoSuchFileException” ], [ “java.nio.file.NoSuchFileException” ] ] } – Arturski

+0

如果你使用'( ??(?<= ^引起:)。*?例外)'? –

+0

仍然返回2个值,但都是正确的。 { “异常”: [ “java.nio.file.NoSuchFileException” ], [ “java.nio.file.NoSuchFileException” ] ] } – Arturski