【问题标题】:regex java exception exclude "Caused by:"正则表达式 java 异常排除“引起:”
【发布时间】:2017-04-04 21:56:32
【问题描述】:

我正在尝试从日志文件中捕获 Java 异常,但我想使用 Oniguruma 正则表达式版本 6.0.0 排除“Caused by:”字符串:

^.+Exception

返回:

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

我如何编写一个捕获异常名称但忽略它前面的“Caused by:”字符串的正则表达式。这将在 Grok Logstash 中使用

【问题讨论】:

  • 那么^(?!.*Caused by:).+Exception 呢?它应该可以工作。
  • 不工作,在rubular.com/r/JFI3pukx4y测试
  • 它正在工作,因为它与包含 Caused by: 的行不匹配,正如您所写 我正在尝试从没有“原因:”的日志文件中捕获 Java 异常字符串。如果这不是您真正在做的事情,请更新问题。
  • 是的,但这意味着我想捕获 java 异常名称,而不是“Caused By:”字符串。我需要正则表达式只返回“java.nio.file.NoSuchFileException”
  • 这应该是问题的一部分,而不是评论。使用(?<=^Caused by: ).+Exception。或者,如果您可以访问捕获组,请使用^Caused by:\s*(.+Exception)。你在哪里使用正则表达式?格罗克/Logstash?爪哇?

标签: regex logstash logstash-grok


【解决方案1】:

您可以通过以下模式使用捕获

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

(?&lt;exception&gt;[\w.]+) 命名的捕获组将匹配并捕获 组“异常”(创建具有相同名称的变量)1+ 单词(字母、数字或下划线)或 . 字符.

回答您的问题,检查并要求某些内容但将其排除在匹配之外,您可以使用环视:

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

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

【讨论】:

  • 您好 Wiktor,感谢您的解决方案!我在 grok 调试器中生成了 2 个值,由于某种原因,有和没有由字符串引起的。 {“异常”:[[“引起:java.nio.file.NoSuchFileException”],[“java.nio.file.NoSuchFileException”]]}
  • 如果你使用(?&lt;exception&gt;(?&lt;=^Caused by: ).*?Exception)?
  • 仍然返回 2 个值,但都是正确的。 {“异常”:[[“java.nio.file.NoSuchFileException”],[“java.nio.file.NoSuchFileException”]]}
  • 请检查您的其他设置。顺便说一句,您只在模式周围使用了一组括号,对吧?
猜你喜欢
  • 1970-01-01
  • 2015-02-07
  • 2015-05-03
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多