匹配字符之前的所有内容,如果有的话(正则表达式)

Match everything that comes before a character, if there is one (Regex)

大家晚上好!

我写了一个捕获资源的模式:

X-ray Tracing ID : Root=%{DATA:resource}

在下面的日志摘录中:

(d9be2aec-d683-4d9b-8d3c-428f1f339416) X-ray Tracing ID : Root=1-612dd69a-4b2951db368113005fb367ce 

但是,我正在考虑在日志中出现 @ 之后的附加片段的情况,我不想考虑这种情况:

(d9be2aec-d683-4d9b-8d3c-428f1f339416) X-ray Tracing ID : Root=1-612dd69a-4b2951db368113005fb367ce@12345678998765 

这是我写的 grok 工作的地方:

X-ray Tracing ID : Root=%{DATA:resource}[^@]*

以及如何结合这两种情况?类似的语法,除了如果出现@我们不考虑其余部分,如果出现,如果没有,我们全部考虑?

我是 grok 模式的初学者,希望得到提示。

如果您检查 Grok 模式,您将看到 DATA .*?。如果您的模式以此构造结尾,它将不会匹配任何内容,因为正则表达式末尾的惰性模式永远不会消耗任何文本。

我建议将除空格和 @ 以外的所有字符与 (?<resource>[^[:space:]@]+) 匹配,而不是使用 DATA 模式:

X-ray Tracing ID : Root=(?<resource>[^[:space:]@]+)

查看测试截图: