正则表达式不返回3行的第一个数字

时间:2013-07-08 22:14:16

标签: regex perl

您好我是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;

有人可以告诉我,我的逻辑有什么问题吗?

3 个答案:

答案 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