Oniguruma模式-行尾无法使用

时间:2019-12-27 10:58:41

标签: regex grok

我有一个名为问题的字段:

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)

因此,我将具有值为 java.lang.NullPointerException

的字段 exception

似乎找不到行头。 \ 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)' }
  }

}

1 个答案:

答案 0 :(得分:-1)

正则表达式(?<exception>java(.*)Exception\z)将搜索以下内容:

  1. java这个词
  2. 任何内容,包括一个空字符串(.*
  3. Exception这个词
  4. 输入\z的结尾

但是,输入(\z)的末尾没有单词“ Exception”。在“异常”和输入结尾之间还有其他内容。因此,您还必须匹配此附加输入。可能很简单:

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

这将分为:

  1. java这个词
  2. 任何内容,包括一个空字符串(.*
  3. Exception这个词
  4. 任何内容,包括一个空字符串(.*
  5. 输入(\z)的结尾

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