gpt4 book ai didi

java - 正则表达式和捕获组

转载 作者:行者123 更新时间:2023-11-30 03:43:07 24 4
gpt4 key购买 nike

我有一个关于 Java 正则表达式和捕获组的问题。我的目标是解析日志文件并将相关字段提取到 QRadar 中。我并不完全在编写Java代码,但是因为QRadar使用Java正则表达式来解析日志文件,并且因为我的问题是正则表达式问题,所以我将其发布在这里希望得到一些针对我的问题的指针/解决方案。

这是我的问题 -

我正在尝试解析 CEF(通用事件格式)格式的日志文件。以下是日志文件中的几行 -

[blah, blah...] cs1=DataValue1 cs2=DataValue2

[blah, blah...] cs2=DataValue3 cs1=DataValue4

我的目标是从上述行中提取字段 cs1cs2 的数据值。因此,我有兴趣捕获上述行中的值 - DataValue1DataValue2DataValue3DataValue4

我想出了以下正则表达式来完成相同的任务 -

cs1 字段的正则表达式 - \scs1\=(.*?)\s\w+\=

cs2 字段的正则表达式 - \scs2\=(.*?)\s\w+\=

使用上述正则表达式和捕获组,我能够捕获数据值。但仅限于某些情况。因此,如果您查看上面的日志条目,您会发现日志条目中的字段 cs1cs2 的顺序并不固定。因此,有时 cs1 字段出现在 cs2 之前(在日志条目的中间),而有时字段 cs1 出现在末尾(是日志条目的最后一个字段。 cs2 字段也存在类似的行为。仅当该字段不是最后一个字段时,使用我当前的正则表达式才有效。

例如对于第一个日志条目行 [blah, blah...] cs1=DataValue1 cs2=DataValue2,我的正则表达式正确解析/提取 cs1 字段的值,但它们由于 cs2 字段位于行末尾,因此 cs2 字段失败。

同样,对于第二个日志条目行[blah, blah...] cs2=DataValue3 cs1=DataValue4,我的正则表达式正确解析/提取cs2的值> 字段,但他们无法提取 cs1 字段的值,因为 cs1 字段位于行尾。

我的问题是 - 我的正则表达式应该是什么,以便它可以正确解析/提取数据字段值,无论该字段出现在日志文件条目的中间还是末尾?

感谢任何帮助

问候,

P.S.:如果有人感兴趣,我也在 QRadar 论坛上发布了这个问题( https://www.ibm.com/developerworks/community/forums/html/topic?id=f48bc2dc-2ccb-42df-b543-dc0522491fad ),但还没有任何回复......

最佳答案

如果您不知道其排列顺序,只需使用前瞻来捕获 cs1cs2 字段的值。

^(?=.*?\scs1=(\S+))(?=.*\scs2=(\S+))

Java 正则表达式是,

^(?=.*?\\scs1=(\\S+))(?=.*\\scs2=(\\S+))

DEMO

组索引 1 包含 cs1 的值,索引 2 包含 cs2 的值

关于java - 正则表达式和捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26374973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com