将捕获的组分配给值,如果不匹配:分配字符串
Assign captured group to value, and if no match: assign string
在 Perl 正则表达式中,the documentation 说
... in scalar context, $time =~ /(\d\d):(\d\d):(\d\d)/
returns a true
or false value. In list context, however, it returns the list of
matched values (,,)
但是当您提供替代选项时 - 当未找到匹配项时 - 即使在列表上下文中也会分配 TRUE 或 FALSE 是怎么回事?
例如,我想将匹配的组分配给一个变量,如果找不到,则使用字符串值 ALL。
my ($var) = $string =~ /myregex/ || 'ALL';
这可能吗?那么多个捕获的组呢?例如
my ($var1, $var2) = $string =~ /(d.t)[^d]+(d.t)/ || 'dit', 'dat';
如果第一组不匹配,则使用 'dit'
,如果第二组未找到匹配,则使用 'dat'
。
对于第一个需求,可以使用三元运算符:
my $string = 'abded';
for my $f ('a' .. 'f') {
my ($v1) = $string =~ /($f)/ ? () : ('ALL') ;
say "$f : $v1";
}
输出:
a : a
b : b
c : ALL
d : d
e : e
f : ALL
在 Perl 正则表达式中,the documentation 说
... in scalar context,
$time =~ /(\d\d):(\d\d):(\d\d)/
returns a true or false value. In list context, however, it returns the list of matched values(,,)
但是当您提供替代选项时 - 当未找到匹配项时 - 即使在列表上下文中也会分配 TRUE 或 FALSE 是怎么回事?
例如,我想将匹配的组分配给一个变量,如果找不到,则使用字符串值 ALL。
my ($var) = $string =~ /myregex/ || 'ALL';
这可能吗?那么多个捕获的组呢?例如
my ($var1, $var2) = $string =~ /(d.t)[^d]+(d.t)/ || 'dit', 'dat';
如果第一组不匹配,则使用 'dit'
,如果第二组未找到匹配,则使用 'dat'
。
对于第一个需求,可以使用三元运算符:
my $string = 'abded';
for my $f ('a' .. 'f') {
my ($v1) = $string =~ /($f)/ ? () : ('ALL') ;
say "$f : $v1";
}
输出:
a : a
b : b
c : ALL
d : d
e : e
f : ALL