【问题标题】:Oniguruma pattern - end of the line will not work [closed]Oniguruma 模式 - 行尾不起作用[关闭]
【发布时间】:2019-12-27 10:58:41
【问题描述】:

我有一个类似的字段,名为 problem

java.lang.NullPointerException: null\\n09:56:49.712 pl.com.agora.api.client.rest.invocation.FutureCallbacksSupport {HttpClient@2052321524-scheduler} ERROR : Uri invocation failure callback failed.

我想从中排除异常

(?<exception>java(.*)Exception\z)

所以我会有字段 exception 的值:java.lang.NullPointerException

似乎找不到可行的行尾。 \z 或 \Z 没有像我想要的那样工作。 在这里也没有找到答案:https://github.com/stedolan/jq/wiki/Docs-for-Oniguruma-Regular-Expressions-(RE.txt)

在logstash和grok匹配中使用:

filter {
  grok {
      match => { "message" => '%{TIME:timestamp} (\[)?(%{DATA:logger})?(\])? \{%{DATA:thread}\} %{LOGLEVEL:level} : (?<problem>(.|\r|\n)*)' }
      remove_field => ["message"]
      }
  grok {
      match => { "problem" => '(?<exception>java(.*)Exception\z)' }
  }

}

【问题讨论】:

  • 请编辑您的问题以包含您拥有的完整正则表达式以及您如何使用您编写的正则表达式。
  • 嗨@Progman。到目前为止,这是我拥有的第二个和整个正则表达式。它将用于 elasticsearch 和 logstash
  • @MartaZagrajek 标记 \z\Z$ 用于查找输入字符串中的行尾或内容结尾,但您的正则表达式不使用其中任何一个令牌。请edit您的问题包含您想要做什么以及您如何在应用程序/代码中实际使用正则表达式的详细描述。
  • @Amadan 但您可以在 grok 中使用 Oniguruma 模式。我从中删除了 \z 但现在添加了它

标签: regex logstash logstash-grok


【解决方案1】:

正则表达式(?&lt;exception&gt;java(.*)Exception\z) 将搜索以下内容:

  1. java
  2. 任何内容,包括空字符串 (.*)
  3. Exception
  4. 输入结束\z

但是,输入末尾没有“异常”一词 (\z)。您在“异常”和输入结尾之间有其他内容。所以你也必须匹配这个额外的输入。可能很简单:

(?<exception>java(.*)Exception).*\z

这将分为:

  1. java
  2. 任何内容,包括空字符串 (.*)
  3. Exception
  4. 任何内容,包括空字符串 (.*)
  5. 输入结束 (\z)

您需要哪种捕获括号取决于您想要做什么。

【讨论】:

  • 非常感谢您对这个复杂的解释!我看到这里正在工作:regex101.com/r/42e0vp/1 但在 elasticsearch 中的 grok 调试器上没有,所以我将继续努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
相关资源
最近更新 更多