【发布时间】: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