Grok 正则捕获: s+(?<request_time>d+(?:.d+)?)s+ 回顾下: (?:pattern) 匹 配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry| industries’ 更简略的表达式。 表示括号只是起分隔作用,不将括号中匹配的内容存入内存中 因为如果不加?:的话,括号内匹配的内容会放入$1,$2...这些变量中 1、命名分组格式为(?<grp name>),反向引用时用k<grp name> 2、命名分组的匹配的结果存在在变量%+变量中,取命名分组值,$+{grp name}. ? 表示前面字符出现1次或者0次; (pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 “”或‘’。 (?:pattern) 匹 配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry| industries’ 更简略的表达式。 begin 123.456 end [elk@dr-mysql01 frontend]$ cat a1.pl my $str='begin 123.456 end'; if ($str =~/s+(?<request_time>d+(?:.d+)?)s+/){ print "$1 is $1 ";}; [elk@dr-mysql01 frontend]$ perl a1.pl $1 is 123.456 1、命名分组格式为(?<grp name>),反向引用时用k<grp name> 2、命名分组的匹配的结果存在在变量%+变量中,取命名分组值,$+{grp name}. zjtest7-frontend:/root/0825# cat a1.pl my $str=" begin 123.456 end "; if ($str =~/(?<request_time>d+.d+)/) { my ($request_time) = ($+{request_time}); print $request_time." ";}; zjtest7-frontend:/root/0825# perl a1.pl 123.456 zjtest7-frontend:/root/0825# cat a1.pl my $str=" begin 123.456 end "; if ($str =~/(?<request_time>w+s+d+)/) { my ($request_time) = ($+{request_time}); print $request_time." ";}; zjtest7-frontend:/root/0825# perl a1.pl begin 123