1

Question

I have this string:

field1=text, CmdSet=[ CmdAV=first CmdArgAV=second CmdArgAV=third CmdArgAV=fourth ], field2=text

Is it possible to write a regex (one line) that will capture the below in a match group?

first second third fourth

Background

This is a syslog event coming from a Cisco ACS device. The event is being received by a SIEM solution. This SIEM solution allows us to use regex to "extract" information from the log by using match groups. We do this by typing in a "regex" line in an input field. So, for example, if I wanted to extract the value of the CmdAV field, I would just do CmdAV\=(.*?)\sCmdArgAV, and tell it to use "match group 1" (which is the only group here anyways). However, the "information" that I want to extract in my question is spread out into a single CmdAV and several CmdArgAV.

Thinking out loud, maybe a regex can be written to match everything between CmdAV= and ], field=text, and then "remove" any instance of CmdArgAV=.

The documentation of this SIEM solution points to this: http://docs.oracle.com/javase/tutorial/essential/regex/ for more information on regex, so I'm guessing it uses Java.

4

3 に答える 3

1

これを試してください...うまくいくはずです:

public class Test{
 public static void main(String []args){
     String str = "field1=text, CmdSet=[ CmdAV=first CmdArgAV=second CmdArgAV=third CmdArgAV=fourth ], field2=text";
    Pattern p = Pattern.compile("Cmd\\w*=(\\w+)");
    Matcher m =  p.matcher(str);
    while (m.find()) {
        System.out.println(m.group(1)); // first, second, third, fourth
    }
 }
}
于 2013-10-20T10:27:35.450 に答える
1

randomtextが含まれていないと仮定する=と、で始まりスペースで終わるすべてをキャプチャしないで=ください-次に、一致の配列をスペースで結合して、ターゲット文字列を取得します...

/=([^ ]+) /

first、、、のsecond配列thirdを与える必要がありますfourth

を含むランダムテキストを考慮に入れるには=、次のことができます...

/\bstrCmd(Arg)?=(.+?)\b/

...そして、2 番目のキャプチャ グループを使用します

于 2013-10-20T10:30:59.797 に答える
0

これを試してください:

Cmd\w*AV=\K(\w+)

この例を見るとわかるように、うまくいきました。

ここから読み取れるように、\K はテキストを正規表現の一致から除外します

残念ながら\KJavaではサポートされていません(あなたが言ったように)。私が提案できる最高のものは(今のところ)これです:

Cmd\w*AV=(\w+)

そして、いくつかのMatcher方法を使用します。

于 2013-10-20T11:02:52.237 に答える