3

嗨,我是 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;

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

4

3 回答 3

5

您的代码将覆盖循环的以下迭代中的第一个匹配项,22 个匹配项,但 666 个替换它。在第一场比赛后休息:

($num )= $line =~ /([0-9]+) .*/ and last;

或删除循环并匹配sample

($num )= $sample =~ /([0-9]+)/;
于 2013-07-08T22:17:20.197 回答
1

我认为所写的模式不会在下面过滤掉像“s67”这样的条目

我的 $sample = "fd 66s s67 22 sdf sdf 96 dsf6 66s 656 dd 55";

所以它需要类似的东西

($num) = $line =~ /\b([0-9]+)\b.*/ 和最后一个;

于 2013-07-08T23:17:46.617 回答
0

或者试试

 ($num) = $sample =~ /[0-9]+/g
于 2013-07-08T22:41:38.123 回答