Perl 正则表达式 return 捕获第一组中的命名组

Perl Regex return named groups in capture Group one

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

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

每个正则表达式本身都在工作,但我无法以输出始终在第一个捕获组中的方式组合这两个

输入 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)))

您可以使用 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 固定字符串
  • ) - 分支重置组结束
  • $ - 字符串结尾。