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
固定字符串
)
- 分支重置组结束
$
- 字符串结尾。
我尝试获取一个正则表达式,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
固定字符串
)
- 分支重置组结束$
- 字符串结尾。