问题
我有这个字符串:
field1=text, CmdSet=[ CmdAV=first CmdArgAV=second CmdArgAV=third CmdArgAV=fourth ], field2=text
是否可以编写一个正则表达式(一行)来捕获匹配组中的以下内容?
first second third fourth
背景
这是来自 Cisco ACS 设备的系统日志事件。 SIEM 解决方案正在接收该事件。此 SIEM 解决方案允许我们使用正则表达式通过匹配组从日志中“提取”信息。我们通过在输入字段中输入“正则表达式”行来完成此操作。因此,例如,如果我想提取 CmdAV
的值领域,我会做 CmdAV\=(.*?)\sCmdArgAV
,并告诉它使用“匹配组 1”(无论如何,这是这里唯一的组)。但是,我想在问题中提取的“信息”被分散到一个 CmdAV
中。和几个CmdArgAV
.
大声思考,也许可以编写一个正则表达式来匹配 CmdAV=
之间的所有内容。和], field=text
,然后“删除” CmdArgAV=
的任何实例.
此 SIEM 解决方案的文档指出了这一点:http://docs.oracle.com/javase/tutorial/essential/regex/有关正则表达式的更多信息,所以我猜测它使用 Java。
最佳答案
假设 randomtext
不包含 =
,为什么不捕获以 =
开头并以空格结尾的所有内容 - 然后加入数组带有空格的匹配项以获得目标字符串...
/=([^ ]+) /
应该为您提供包含first
、second
、third
、fourth
的数组
要使其考虑包含 =
的随机文本,您可以这样做...
/\bstrCmd(Arg)?=(.+?)\b/
...并使用第二个捕获组
关于java - 什么正则表达式将提取该字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476305/