You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Splunk日志正则提取需求:如何使用rex命令仅获取方括号内等号后的字符串

调整Splunk Rex命令提取目标内容

你的问题核心是原来的正则捕获组范围不对,把整个方括号区域都包含进去了。咱们一步步来调整:

1. 单个字段的正确提取

如果只需要提取某个字段(比如C)的值,把捕获组放在等号之后、闭合方括号之前就可以了。比如提取C字段的正确命令:

rex field=_raw "\[\sC=(?<New_Field>[^\]]*)\s\]"

这里的[^\]]*表示匹配除了闭合方括号]之外的所有字符,刚好精准捕获等号后的目标内容,不会包含方括号。

2. 一次性提取所有字段并组合成目标格式

如果要把A、B、C三个字段的值用;分隔起来,可以先分别提取每个字段的值,再用eval拼接:

| rex field=_raw "\[\sA=(?<A>[^\]]*)\s\]"
| rex field=_raw "\[\sB=(?<B>[^\]]*)\s\]"
| rex field=_raw "\[\sC=(?<C>[^\]]*)\s\]"
| eval Combined_Value = A . " ; " . B . " ; " . C

或者用一个更高效的正则一次性匹配所有三个字段,减少正则执行次数:

| rex field=_raw "\[\sA=(?<A>[^\]]*)\s\]\s\[\sB=(?<B>[^\]]*)\s\]\s\[\sC=(?<C>[^\]]*)\s\]"
| eval Combined_Value = A . " ; " . B . " ; " . C

执行后Combined_Value字段就会得到你想要的结果:xaxxxxx ; weea case ; another example 0。

为什么原来的命令不行?

你之前的(?<New_Field>\[\sC=(.*?)\s\])把整个[ C=another example 0 ]都放进了捕获组,所以提取结果包含方括号。调整后把捕获组的范围限定在=和\s]之间,就只提取等号后的内容了。

内容的提问来源于stack exchange,提问作者LnN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 01:09:10