从捕获组中提取术语

时间:2018-07-18 13:50:09

标签: regex logging pcre quotes extraction

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

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

日志格式很严格,但是内容从一行到另一行各不相同。 在某些日志中将包含由双引号分隔的句子,例如。 “ ... ... ...”,同一位置的其他某个位置(因此在同一捕获组中捕获)将仅包含-(ascii 45)

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

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

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

反正有这样做吗?就像是

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

(我知道这不起作用)

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

请参见regex demo

详细信息

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