从捕获组中提取术语

extract terms from a capture group

我遇到了一个我无法解决的难题,所以我在这里问一下。

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

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

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

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

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

有办法吗?就像是

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

(我知道这是行不通的)

感谢您的帮助!

您可以使用 branch reset group(?|...|...) 来匹配各种模式,但始终捕获到同一组:

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

regex demo

详情

  • (?| - 分支重置组开始
    • \" - 一个"
    • (?<cap>[^\"]*) - 组 "cap":除 "
    • 之外的任何 0+ 个字符
    • \" - 一个"
    • | - 或
    • (?<cap>-+) - 组 "cap":1+ - 个字符
  • ) - 分支重置组结束。