使用RegEx来获取括号中的字段

时间:2016-03-04 20:09:31

标签: regex perl splunk

我在splunk日志的日志文件中有多个方括号数据。我试图找到一个名为UserDataGuid的特定字段,然后在此后的括号中收集数据。我唯一的选择似乎是标准中的正则表达式,似乎与perl类似。然而,我在这里做错了什么不起作用?

   | rex "\]\s(?<UserDataGuid>.*?)\s*$"

   // this trial looks more promising but grabs the last bracket :( and doesn't name the field, to be used in a subSearch.
  | rex "(?i)UserDataGuid\s*\[([^\}]*)\]

数据看起来像这样

[21] INFO UserDataGuid [fas08f0da-faf6-4308-aad6-hfld5643gs] [(null)] [(null)] [(null)]

我只想要guid

fas08f0da-faf6-4308-aad6-hfld5643gs

我希望它能成为一个我可以重复使用的字段,就像在splunk中使用字段一样。

3 个答案:

答案 0 :(得分:1)

我会尝试以下正则表达式:

(?<=UserDataGuid \[).*?(?=\])/g

这将捕获fas08f0da-faf6-4308-aad6-hfld5643gs。查看演示here

答案 1 :(得分:1)

使用

\]\s(?<UserDataGuid>.*?)\s*$

你说:匹配] &gt; \],跟随任何空格字符(只有一个)&gt; { {1}},由名称为 UserDataGuid &gt; \s的群组跟随,其中包含除换行符之外的任何字符(零次,无限次)&gt; (?<UserDataGuid> ... )(在懒惰模式下,),跟随任何空格字符(零次,无限次)&gt; { {1}},后跟字符串&gt; .*?

的结尾

我认为你不想要\s*; 你想要匹配(以某种方式)$,在匹配&#34;的组中没有呼叫(?<UserDataGuid> ... )任何字符,除了换行符(零次,无限次)&gt; UserDataGuid(在懒惰模式下,)&#34;

UserDataGuid

更改} ] ,然后,您在第1组中捕获了GUID

但是,你不需要匹配&#34; UserDataGuid \ s [*&#34; 你可以使用:

  

.*?

然后,您只匹配GUID,并在组#1中找到它 你可以删除组#1的括号,因为它是一个完整的匹配:

  

(?i)UserDataGuid\s*\[([^\}]*)\]

https://regex101.com/r/sI3kW4/1

答案 2 :(得分:1)

看起来你想要

python