匹配字符之前的所有内容,如果有的话(正则表达式)
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:]@]+)
查看测试截图:
大家晚上好!
我写了一个捕获资源的模式:
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:]@]+)
查看测试截图: