Perl文件逐行读取(RegEx)

时间:2013-04-20 04:34:44

标签: regex perl

我要做的是打开一个文件并逐行阅读 一旦我找到了我的正则表达式所寻找的内容,我想将每个人放入@accounts数组中,并将它们打印到我的屏幕上。

虽然我没有得到任何结果。 我必须在这里犯一个简单的错误吗?

#!/usr/bin/perl

use strict;
use warnings;

my $line;
my $file;
my $start;
my $end;
my @match;
my @accounts;

print "Enter the file name (example: file.txt): ";
chomp ($file = <STDIN>);


open FILE, $file or die "Cannot open $file read :$!";

while ($line=<FILE>) {

    $start = '">';
    $end = '</option>';

    @match = ($line =~ /$start(.*?)$end/g);

    foreach (@match)
    {
        push @accounts, $_;
        print " $_\n ";
    }
}

2 个答案:

答案 0 :(得分:4)

1)不要使用bareword文件句柄:

open my $INFILE, '<', $fname
    or die "Couldn't open $fname: $!";

2)@match ??你使用了g标志,所以@matches会是一个更好的名字。通常,数组名称将是复数。

3)避免在代码中使用$ _:

for my $match (@matches) {
    print $match;
}

for和foreach在perl中是相同的,所以使用 - 键入的时间更短。

4)

  

$ start ='“&gt;';

您确定要查找双引号后跟&gt; ??使用此数据文件,您的代码可以正常使用:

<option">hello world</option>

然而,这是一些奇怪的数据。

答案 1 :(得分:0)

use feature ":5.16";
use warnings FATAL => qw(all);
use strict;

my $t = "aaaa\">AAAA</option>\n bbbb\">BBBB</option> cccc\">CCCC</option>";
my $start = '">';
my $end = '</option>';
say for $t =~ /$start(.*?)$end/g;

产地:

AAAA
BBBB
CCCC