regex - 将多个正则表达式匹配项之一分配给变量作为 Perl 单行代码(取消引用数组?)

标签 regex arrays perl

我已经知道我可以像这样一次打印所有正则表达式匹配项(尽管没有分隔符):

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/

相关文章:

c# - 检查字符串是否包含 Enumerable.Range 过滤器列表中的匹配项

linux - 如何为 Net::IRC 机器人设置互联网连接检测器?

python - 其他优于基于 TCL 的 Expect 的解决方案/语言?

javascript - js 正则表达式匹配以 X 开头而不是 Y 开头的路径

regex - 匹配分隔列表中的最后一个元素?

regex - 如何在正则表达式箱中获取匹配组的索引?

php - 检查数组中的所有值是否都是数字的最快方法是什么?

java - 使用 Java 正则表达式验证长字符串中的日期

python - 在Python中创建具有特定条件的矩阵

perl - 为 perl 安装 GD 模块 - 安装程序时出错