gpt4 book ai didi

regex - 如何仅获取正则表达式 Grok 过滤器的第一个匹配项

转载 作者:行者123 更新时间:2023-12-04 10:27:46 27 4
gpt4 key购买 nike

目标

我只想使用 logstash Grok 从此消息中检索此字符串“14”

3/03/0 EE 14 GFR 20 AAA XXXXX 50 3365.00

这是我的 grok 代码
grok{
match => {
field1 => [
"(?<number_extract>\d{0}\s\d{1,3}\s{1})"
]
}
}

我只想匹配第一个匹配项“14”,但我的 Grok 过滤器返回所有匹配项:
14 20 50

最佳答案

如果您需要查找仅由 1、2 或 3 位数字组成的数字的第一次出现,您可以使用

^(?:.*?\s)?(?<number_extract>\d{1,3})(?!\S)

详情
  • ^ - 字符串开头
  • (?:.*?\s)? - 除换行符以外的任何 0+ 字符的可选子字符串,尽可能少,然后是空格(如果存在,则可以在字符串的开头进行匹配)
  • (?<number_extract>\d{1,3}) - 1 到 3 位数字
  • (?!\S) - 一个负向前瞻,确保右边有一个空格或字符串结尾(在字符串结尾启用匹配)。

  • 替代解决方案

    如果您知道您要查找的数字在一个类似日期的字段和另一个字段之后,并且您想强制进行此预验证,则可以使用
    ^\d+/\d+/\d+\s+\S+\s+(?<number_extract>\d+)

    regex demo

    如果您不必检查第一个字段是否与日期类似,您可以简单地使用
    ^\S+\s+\S+\s+(?<number_extract>\d+)
    ^(?:\S+\s+){2}(?<number_extract>\d+) // Equivalent

    the regex demo here .

    详情
  • ^ - 字符串开头
  • \d+/\d+/\d+ - 1+ 位数字,/ , 1+ 位数字, / , 1+ 位
  • \s+ - 1+ 个空格
  • \S+ - 除空格之外的 1+ 个字符
  • \s+ - 1+ 个空格
  • (?<number_extract>\d+) - 捕获组“number_extract”:1+ 位数字。

  • Grok 演示:

    enter image description here

    关于regex - 如何仅获取正则表达式 Grok 过滤器的第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60559816/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com