0

在 Perl 正则表达式中,文档

... 在标量上下文中,$time =~ /(\d\d):(\d\d):(\d\d)/返回真或假值。但是,在列表上下文中,它返回匹配值的列表($1,$2,$3)

但是,当您提供替代选项时 - 找不到匹配项时 - 即使在列表上下文中也会分配 TRUE 或 FALSE 怎么办?

例如,我想将匹配的组分配给一个变量,如果找不到,则使用字符串值 ALL。

my ($var) = $string =~ /myregex/ || 'ALL';

这可能吗?那么多个捕获的组呢?例如

my ($var1, $var2) = $string =~ /(d.t)[^d]+(d.t)/ || 'dit', 'dat';

where 如果第一组不匹配,'dit'则使用,如果第二组不匹配,则使用'dat'

4

1 回答 1

1

对于第一个要求,您可以使用三元运算符:

my $string = 'abded';
for my $f ('a' .. 'f') {
    my ($v1) = $string =~ /($f)/ ? ($1) : ('ALL') ;
    say "$f : $v1";
}

输出:

a : a
b : b
c : ALL
d : d
e : e
f : ALL
于 2016-02-25T13:37:49.897 回答