java - 什么正则表达式将提取该字符串?

标签 java regex

问题

我有这个字符串:

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 不包含 =,为什么不捕获以 = 开头并以空格结尾的所有内容 - 然后加入数组带有空格的匹配项以获得目标字符串...

/=([^ ]+) /

应该为您提供包含firstsecondthirdfourth的数组

要使其考虑包含 = 的随机文本,您可以这样做...

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

...并使用第二个捕获组

关于java - 什么正则表达式将提取该字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476305/

相关文章:

java - 根据项目的输出文件夹结构配置 Tomcat webapps 目录

java - 如何内嵌显示数据?

regex - 如何从 Perl 正则表达式生成所有可能的排列?

java - Android 多点触控 : Not detecting MotionEvent. ACTION_POINTER_DOWN

java - 单击实际 View 中的按钮时如何使用 map View 打开新 View

java - 在转换为 Java 对象之前检查 xsd datetime 是否有定义的时区

java - 这个正则表达式有什么作用?

python - 特殊字符不被正则表达式替换

regex - 使用正则表达式的 R 子集数据集

javascript - 如何使用正则表达式模式数组来检查 url