【问题标题】:Regular expression not returning first number from 3 lines正则表达式不从 3 行返回第一个数字
【发布时间】:2013-07-09 12:40:05
【问题描述】:

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

谁能告诉我我的逻辑有什么问题?

【问题讨论】:

  • 每次循环时都会覆盖变量。
  • 如果只关心第一行,为什么还要循环?
  • 这只是测试用例,但在我的实际场景中,我想从电子邮件主题中获取数字,因此主题可以包含多行

标签: regex perl


【解决方案1】:

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

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

或删除循环并与sample匹配:

($num )= $sample =~ /([0-9]+)/;

【讨论】:

    【解决方案2】:

    我认为所写的模式不会过滤掉下面的“s67”之类的条目

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

    所以它需要类似的东西

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

    【讨论】:

      【解决方案3】:

      或者试试

       ($num) = $sample =~ /[0-9]+/g
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 2012-03-16
        相关资源
        最近更新 更多