簡體   English   中英

Perl文件逐行讀取(RegEx)

[英]Perl File Reading Line By Line (RegEx)

我想做的是打開一個文件,並逐行讀取它。
找到正則表達式的內容后,我想將每個正則表達式放入@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 ";
    }
}

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中是同一回事,因此用於–它的鍵入時間較短。

4)

$ start ='“>';

您確定要查找雙引號,然后是>嗎? 您的代碼對此數據文件對我來說正常工作:

<option">hello world</option>

但是,那是一些看起來很奇怪的數據。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM