【问题标题】:Perl Regex return named groups in capture Group onePerl Regex 在捕获组一中返回命名组
【发布时间】:2022-01-12 16:35:36
【问题描述】:

我尝试获取一个正则表达式,它返回第一个捕获组中的匹配项。

我放入正则表达式的应用程序只能使用第一个捕获组。

每个正则表达式都在工作,但我不能将这两个组合在一起,使输出始终在第一个捕获组中

输入 1:

Event: Started Flapping

正则表达式 1:

^Event: (\S+ Flapping)

输出 1:

Started Flapping

输入 2:

Event: CRIT -> OK

正则表达式 2:

^Event:\s+\S+\s+\S+\s+(\S+)

输出 2:

OK

我尝试过的正则表达式 (?:^Event:\s+\S+\s+\S+\s+(?P<service>\S+)$|^Event: (?P<flap>Started Flapping)|((?P=service)|(?P=flap)))

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    您可以使用branch reset group

    ^Event:\s+(?|\S+\s+\S+\s+(\S+)|(Started Flapping))$
    # or, to factor in \S+\s+:
    ^Event:\s+(?|(?:\S+\s+){2}(\S+)|(Started Flapping))$
    

    请参阅regex demo详情

    • ^ - 字符串开头
    • Event: - 固定字符串
    • \s+ - 一个或多个空格
    • (?| - 分支重置组的开始:
      • \S+\s+\S+\s+ - 一个或多个非空格出现两次,后跟一个或多个空格
      • (\S+) - 第 1 组:一个或多个非空格
    • | - 或
      • (Started Flapping) - 第 1 组:Started Flapping 固定字符串
    • ) - 分支重置组结束
    • $ - 字符串结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-03
      • 2012-06-21
      • 2021-08-23
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多