我已经知道我可以一次性打印所有正则表达式匹配项(尽管没有分隔符),如下所示:
perl -e '$t="10 hello 25 moo 31 foo"; print ( $t =~ /(\d+)/g ) ; print "\n";'
# 102531
我也知道我可以将正则表达式匹配作为命名数组,然后将单个匹配分配给变量:
perl -e '$t="10 hello 25 moo 31 foo"; @n=( $t =~ /(\d+)/g ); $o=$n[1]; print "$o\n";'
# 25
我也知道我可以做正则表达式,然后参考,比如说$1
:
perl -e '$t="10 hello 25 moo 31 foo"; $t =~ /(\d+)/g ; $o=$1; print "$o\n";'
# 10
...虽然,由于某种原因,$2
在这里不起作用 - 为什么?
我想做的是一次性/单行将正则表达式中的特定匹配分配给变量(不使用命名数组)。由于上面告诉我们正则表达式匹配的结果是一个数组,我认为像这样的成语(与取消引用数组一起使用?)会起作用:
$o = @{ ( $t =~ /(\d+)/g ) }[1];
但不幸的是它没有:
perl -e '$t="10 hello 25 moo 31 foo"; $o=@{ ( $t =~ /(\d+)/g ) }[1]; print "$o\n";'
#
那么,有没有办法在 Perl 中实现正则表达式匹配数组的单行赋值?