while (<DATA>)
{print "$1" if /((?:\d+)(?:\s*)){5}/;}
数据
12 14 43 43 41
35 43 543 63 63
输出:4163
我想知道为什么输出不是$1
答案 0 :(得分:2)
我想知道为什么输出不是
$1
双引号字符串插入变量。如果您需要$1
,则可以使用print '$1';
。
$1
包含捕获的最近成功的正则表达式匹配的第一次捕获。
让我们检查以下类似的程序,这是对当前OP中的程序的简化。
while (<DATA>) {
print $1 if /(\d+\s*){5}/;
}
__DATA__
12 14 43 43 41
35 43 543 63 63
对于while循环的第一次传递,最后一次只在正则表达式中捕获匹配,它捕获41
后跟换行符。然后由print "$1"
打印。
对于while循环的第二次传递,最后一次匹配正则表达式中的唯一捕获,它捕获63
后跟换行符。然后由print "$1"
打印。
因此,输出是
41
63
如果您希望输出
12 14 43 43 41
35 43 543 63 63
你可以做到
print $1 if /((?:\d+\s*){5})/;
或者你可以做到
print $_ if /(?:\d+\s*){5}/;
答案 1 :(得分:0)
听起来像是Regexp::Debugger的工作。
但如果你告诉我们你想得到什么结果,那么帮助你会更容易。