Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl中的完美匹配_Perl - Fatal编程技术网

perl中的完美匹配

perl中的完美匹配,perl,Perl,我有一个关于完美匹配的问题。我想从一个文件中得到正整数和负整数的总和。我还想得到文件中具有相同值的日期 我的档案: Hello -12, 3.4 and 32. Where did you go on 01/01/2013 ? On 01/01/2013, we went home. -4 plus 5 makes 1. 03/02/2013 解决方案: -16 //the sum of negative integers. 38 //the sum of positive i

我有一个关于完美匹配的问题。我想从一个文件中得到正整数和负整数的总和。我还想得到文件中具有相同值的日期

我的档案:

Hello  -12, 3.4 and 32. Where did you
go on 01/01/2013 ? On 01/01/2013, we
went home. -4 plus 5 makes 1.
03/02/2013
解决方案:

-16    //the sum of negative integers.
38     //the sum of positive integers.
2      //count of dates have same values.
我的代码:

    $sum=0;
    $sum1=0;
    while ($_=<>) {
        for each($_=~ /_\d+g){
            $sum+=$_;
        }
        for each($_=~ /_\d+(\.| )/g){
            $sum1+=$_;
        }
        foreach($_=~ / \d{2}(/\d{2}({/\d{4})?)?/ {
            $count++;
        }
    }
    print "$sum\n";
    print "$sum1\n";
    print "$count\n";
} 
$sum=0;
$sum1=0;
while($\=){
对于每个($\uD=~/\uD+g){
$sum+=$\ux;
}
对于每个($\=~/\ud+(\.\124;)/g){
$sum1+=$\u1;
}
foreach($\u=~/\ d{2}(/\d{2}({/\d{4}))?/{
$count++;
}
}
打印“$sum\n”;
打印“$sum1\n”;
打印“$count\n”;
} 

我的代码错误。请帮助。我无法打印上面的结果。

您的代码非常糟糕。它包含许多语法错误,您应该在每个脚本中包含和

也就是说,我可以通过演示如何解析文件并同时提取各种正则表达式来帮助您:

use strict;
use warnings;

while (<DATA>) {
    print "Processing: $_";

    while (m{(\d{2}/\d{2}/\d{4})|(-\d+)|(\d+\.?\d*)}g) {
        my ($date, $neg, $pos) = ($1, $2, $3);
        if (defined $date) {
            print "  Found Date: $date\n";
        } elsif (defined $neg) {
            print "  Found Neg: $neg\n";
        } elsif (defined $pos) {
            print "  Found Pos: $pos\n";
        }
    }
}

__DATA__
Hello  -12, 3.4 and 32. Where did you
go on 01/01/2013 ? On 01/01/2013, we
went home. -4 plus 5 makes 1.
03/02/2013

您必须始终将
use strict
use warnings
添加到您编写的每个Perl程序的顶部,并使用
my
声明您的所有变量,尽可能接近它们的第一个使用点。这尤其适用于您请求他人帮助修复它的情况,这是一种良好的方式。如果你可以添加一些缩进和空格,这样你的代码至少是可读的。在这种情况下,你发布了一个甚至没有编译的Perl程序。这是没有理由的。请先修复它,然后再请其他人花宝贵的时间帮助你。考虑到
-12
-12.4失败ode>4。是的,我故意将我的正则表达式建议限制在他的测试数据中的数字上,因为我只是演示了一次处理多个正则表达式的总体技术,而不是猜测他的解析意图。老实说,帮助一个如此糟糕的人感觉有点侮辱这是他们的第一个问题,但这段代码应该能让他找到90%的解决方案,并有望在未来的问题中找到更好的代码。
Processing: Hello  -12, 3.4 and 32. Where did you
  Found Neg: -12
  Found Pos: 3.4
  Found Pos: 32.
Processing: go on 01/01/2013 ? On 01/01/2013, we
  Found Date: 01/01/2013
  Found Date: 01/01/2013
Processing: went home. -4 plus 5 makes 1.
  Found Neg: -4
  Found Pos: 5
  Found Pos: 1.
Processing: 03/02/2013
  Found Date: 03/02/2013