小编mca*_*ria的帖子

Perl:命名捕获组默认为替换字符串

以下 Perl 代码在第二次尝试取消引用捕获组“ext”时失败

use strict;
use warnings;

foreach(qw/2.1 2/){
#foreach(@ARGV){
    my $out= sprintf("%.2f", $_);
    $out =~ s/(?:(?<ext>\.[1-9]?)|\.0)0([^\w]|$)/$+{'ext'}/g;
    print ":".$out.":\n";
}
Run Code Online (Sandbox Code Playgroud)

如果未定义替换字符串中的捕获组,如何设置默认值?

我确信还有其他几种方法可以解决这个问题,但我相信无法为捕获组设置默认值肯定会再次出现 - 所以请帮我解决这个问题。

跟进:

..我在池上建议的帮助下让它工作,所以它读

$out =~ s{(?:(?<ext>\.[1-9]?)|\.0)0([^\w]|$)}{ $+{'ext'} // "" }eg;
Run Code Online (Sandbox Code Playgroud)

……难道就没有别的办法了吗?特别是因为这只适用于 Perl 的“e”评估正则表达式功能。这也必须以标准正则表达式的方式出现,如果一开始就没有捕获的话,至少要忽略捕获组解除引用,不是吗?

regex perl capture-group

5
推荐指数
2
解决办法
142
查看次数

标签 统计

capture-group ×1

perl ×1

regex ×1