【问题标题】:Extract string in square bracket with regex使用正则表达式提取方括号中的字符串
【发布时间】:2021-11-09 10:50:41
【问题描述】:

我在 splunk 中的日志如下:

[ A=xaxxxxx ] [ B=weea case ] [ C=another example 0 ]

如何在“=”之后只获取方括号中的字符串

像这样:xaxxxxxweea case ; another example 0

我的雷克斯是:rex field=_raw "(?<New_Field>\[\sC=(.*?)\s\])"

它提取所有内容,包括方括号 [...]。

【问题讨论】:

标签: regex splunk


【解决方案1】:

在 Splunk 中,只能使用命名的捕获组将数据提取到字段中。因此,正则表达式中编号的捕获组对 Splunk 没有任何意义。您需要在需要提取的图案部分周围使用New_Field 组。

另外,你只匹配C,你可以匹配任何大写字母[A-Z],或者如果有多个,[A-Z]+

你可以使用

\[\s*[A-Z]+=\s*(?<New_Field>.*?)\s*]

请参阅regex demo详情

  • \[ - 一个 [ 字符
  • \s* - 零个或多个空格
  • [A-Z]+ - 零个或多个大写 ASCII 字母
  • = - 一个 = 字符
  • \s* - 零个或多个空格
  • (?&lt;New_Field&gt;.*?) - 组“New_Field”:尽可能少的除换行符以外的任何零个或多个字符
  • \s* - 零个或多个空格
  • ] - ] 字符。

【讨论】:

  • 谢谢。知道我明白我需要做什么。
【解决方案2】:

您可以将不想捕获的内容移到组外:

\[\sC=(?<New_Field>[^\][]*)\s]

模式匹配:

  • \[\sC= 匹配 [ 空白字符和 =
  • (?&lt;New_Field&gt; 命名组New_Field
  • [^\][]* 要留在方括号之间,可以使用否定字符类
  • )关闭群
  • \s\] 匹配一个空白字符和]

查看regex demo

要匹配 A、B 或 C,您可以使用字符类:

\[\s[A-Z]=(?<New_Field>[^\][]*)\s]

查看另一个regex demo

【讨论】:

  • 感谢您提供另一种选择。容易理解:D
【解决方案3】:

这是一种更简单的方法——它会在给定事件中将all the matches 返回到多值字段中:

index=ndx sourcetype=srctp
| rex field=_raw max_match=0 "\[[^\[=]+\=(?<new_field>[^\]]+)"

从跳过左括号开始,直到等号

那么等号后到右括号的所有内容都会被匹配

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2018-01-12
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2018-06-24
    相关资源
    最近更新 更多