【问题标题】:Perl File Reading Line By Line (RegEx)Perl 文件逐行读取 (RegEx)
【发布时间】:2013-09-03 06:15:13
【问题描述】:

我要做的是打开一个文件并逐行读取它。
一旦我找到我的正则表达式正在寻找的内容,我想将每个都放入@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 ";
    }
}

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    1) 不要使用裸字文件句柄:

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

    2) @match??您使用了 g 标志,因此 @matches 将是一个更好的名称。通常,数组名称将是复数。

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

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

    for 和 foreach 在 perl 中是同一个东西,所以使用 for——它的类型更短。

    4)

    $start = '">';

    您确定要查找后跟 > 的双引号吗?使用此数据文件,您的代码对我来说很好:

    <option">hello world</option>
    

    但是,这是一些看起来很奇怪的数据。

    【讨论】:

    • 好的,谢谢,我会试试的。问题是我使用了那个正则表达式,因为我不确定如何处理这个:实际的正则表达式类似于 option value="55">hello 虽然每行 55 是不同的number.我怎么打招呼呢?
    • 好吧,然后在你的数据文件中写一行并描述你想要匹配的内容。
    • 如果你想匹配选项标签之间的文本,你可以使用这样的正则表达式://x.但一般来说,有 html/xml 解析器可以为您处理所有复杂的正则表达式和特殊情况,因此您应该使用它们,例如HTML::解析器。
    • 谢谢你。虽然我仍然无法获得任何数据。正则表达式很好,我不知道有什么问题。
    • 好的,下面是提问的方式: 1)这是我的数据示例。 2)这是我想要的输出...... 3)这是我尝试过的......你发布了#3,但你忽略了#1和#2。
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 2013-12-26
      • 2014-04-04
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多