在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'
。
答案 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