我正面临着无法解决的困难,所以我在这里问。
我正在从SIEM解析日志,我想在其中提取一些术语。
日志格式很严格,但是内容从一行到另一行各不相同。 在某些日志中将包含由双引号分隔的句子,例如。 “ ... ... ...”,同一位置的其他某个位置(因此在同一捕获组中捕获)将仅包含-(ascii 45)
我写了以下正则表达式(pcre):
\s(?P<cap1>\".+\"|\-)\s
但是我想捕获句子中双引号之间的'-'符号以及其他字符。
反正有这样做吗?就像是
\s(\"?P<cap1>(.+)\"|?P<cap1>\-)\s
(我知道这不起作用)
感谢您的帮助!
答案 0 :(得分:0)
您可以使用branch reset group,(?|...|...)
来匹配各种模式,但始终将它们捕获到同一组中:
(?|\"(?<cap>[^\"]*)\"|(?<cap>-+))
请参见regex demo
详细信息
(?|
-分支重置组开始
\"
-一个"
(?<cap>[^\"]*)
-组“上限”:除"
之外的任何0个以上的字符\"
-一个"
|
-或(?<cap>-+)
-组“上限”:1个以上-
个字符)
-分支重置组的结尾。