首页 > 解决方案 > 从捕获组中提取术语

问题描述

我面临一个我无法解决的困难,所以我在这里问。

我正在解析来自 SIEM 的日志,我想在其中提取一些术语。

日志格式很严格,但内容因一行而异。其中一些日志将包含一个由双引号分隔的句子,例如。“... ... ...”,在同一个地方的其他一些(因此在同一个捕获组中捕获)将只包含 - (ascii 45)

我写了以下正则表达式(pcre):

\s(?P<cap1>\".+\"|\-)\s

但我想捕获“-”符号以及句子中双引号之间的其他字符。

反正有这样做吗?就像是

\s(\"?P<cap1>(.+)\"|?P<cap1>\-)\s 

(我知道这不起作用)

谢谢你的帮助!

标签: regexloggingpcrequotesextraction

解决方案


您可以使用分支重置组,(?|...|...)来匹配各种模式,但始终捕获到同一个组中:

(?|\"(?<cap>[^\"]*)\"|(?<cap>-+))

查看正则表达式演示

细节

  • (?|- 分支重置组开始
    • \"- 一种"
    • (?<cap>[^\"]*)- 组“cap”:任何 0+ 字符,除了"
    • \"- 一种"
    • |- 或者
    • (?<cap>-+)- 组“上限”:1+-字符
  • )- 分支重置组结束。

推荐阅读