将捕获的组分配给值,如果不匹配:分配字符串

时间:2016-02-25 09:55:18

标签: regex perl capturing-group

在Perl正则表达式中,the documentation

  

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

但是当你提供一个替代选项时 - 如果找不到匹配项,那么即使在列表上下文中也会分配TRUE或FALSE?

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

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

这可能吗?那么多个被捕获的群体呢? E.g。

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

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

1 个答案:

答案 0 :(得分: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