您好我是Perl编程的新手,我编写了一个代码,使用正则表达式从标量变量中存储第一个数字,但我从最后一行获得第一个数字,但我需要从第一行开始编号。
例如,在以下代码中,我需要$num = 22
,但代码返回656
。
my $num ;
my $sample = "fd 22 sdf sdf 96
dsf6 66s sd6 7777 sd
656 dd 55 ";
my @sentences = split(/\n/, $sample);
for my $line(@sentences)
{
($num )= $line =~ /([0-9]+) .*/ ;
}
print $num;
有人可以告诉我,我的逻辑有什么问题吗?
答案 0 :(得分:5)
您的代码将覆盖循环的以下迭代中的第一个匹配,22个匹配,但666替换它。在第一场比赛后休息一下:
($num )= $line =~ /([0-9]+) .*/ and last;
或删除循环并与sample
匹配:
($num )= $sample =~ /([0-9]+)/;
答案 1 :(得分:1)
我认为所写的模式不会过滤掉以下
中的“s67”这样的条目my $ sample =“fd 66s s67 22 sdf sdf 96 dsf6 66s 656 dd 55“;
所以它需要像
这样的东西($ num)= $ line =〜/\ b([0-9] +)\ b。* /和最后一次;
答案 2 :(得分:0)
或尝试
($num) = $sample =~ /[0-9]+/g