我已经知道我可以像这样一次打印所有正则表达式匹配项(尽管没有分隔符):
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 中实现这样的正则表达式匹配数组的单行赋值?
最佳答案
只要改变这个:
perl -e '$t="10 hello 25 moo 31 foo"; $o=@{ ( $t =~ /(\d+)/g ) }[1]; print "$o\n";'
到:
perl -e '$t="10 hello 25 moo 31 foo"; $o=( $t =~ /(\d+)/g )[1]; print "$o\n";'
关于regex - 将多个正则表达式匹配项之一分配给变量作为 Perl 单行代码(取消引用数组?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446752/