【问题标题】:Graylog Regex Replace Extractor UngreedyGraylog 正则表达式替换提取器 Ungreedy
【发布时间】:2022-12-10 19:12:41
【问题描述】:

我正在尝试创建一个 Regex Replace Graylog Extractor,它可以让我获得作为路径参数传递的 ID。

我需要管理的两个案例如下:

/v1/api2/5eb98050122d484001708a11
/v1/api1/5eb98050122d484001708a11/61b3330151e541232146bfb7/

ID 始终是 25 个字母数字字符串。

第一种情况很简单:

^.*([A-Za-z0-9]{24}).*$

第一组匹配正则表达式 (https://regex101.com/r/Idu5Mp/1)。

此外,我总是需要与第一组匹配,因为在提取器的配置中,我会使用 $1 进行替换。

我能找到的唯一解决方案是制作正则表达式 Ungreedy,这样遇到的第一个 ID 将解析正则表达式。遗憾的是,我认为不可能在 Graylog 正则表达式模式中添加正则表达式标志。

有没有其他方法可以使正则表达式变得不贪婪?

编辑: 我也尝试了以下一个但没有成功。我不明白为什么它总是在第一组中获得第二个 ID。

^.*\/([A-Za-z0-9]{24})(?:\/[A-Za-z0-9]{24})?.*$

【问题讨论】:

  • 5eb98050122d484001708a11f 是 25 个字符长。试试.*\/([A-Za-z0-9]{24})(?:\/.*)?$/.*/([A-Za-z0-9]{24})(?:/.*)?$
  • 我试过了,但它似乎不起作用:regex101.com/r/K6lC1r/1regex101.com 说字符有错误/ 我也试过可以测试的 Graylog 界面。
  • 不知道您是如何未能复制和粘贴模式的。那里在顶部评论中以 / 分隔的模式。真正的测试在regex101.com/r/K6lC1r/2 此外,您需要展示您如何在目标环境中使用正则表达式。
  • 但我不需要两种模式。我需要一个在这两种情况下都匹配的,并将第一个字符串中的唯一 id 和第二个字符串中的第一个 id 包含在第 1 组中。我正在 graylog 界面中运行测试以创建 Extractor。
  • 这两个模式是相同的(只是 / 在第二个版本中未转义)。所以它基本上是一种模式。您提供的第一个字符串包含一个 25 个字符的子字符串,而不是 24 个。因此您的要求不明确:您要查找的是 24 个字符还是 25 个字符的字符串?

标签: java regex logging regex-lookarounds graylog


【解决方案1】:

您可以使用

.*/([A-Za-z0-9]{24,})(?:/.*)?$

替换为$1。请参阅regex demo

细节:

  • .* - 尽可能多的除换行符以外的任何零个或多个字符
  • / - 一个/ 字符
  • ([A-Za-z0-9]{24,}) - 第 1 组:24 个或更多字母数字 ASCII 字符
  • (?:/.*)? - / 的可选序列以及除换行符以外的任何零个或多个字符
  • $ - 字符串结尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2015-01-24
    相关资源
    最近更新 更多