2013-04-20 5 views
1

То, что я пытаюсь сделать, это открыть файл и прочитать его по строкам.
Как только я нашел то, что ищет мое регулярное выражение, я хочу поместить каждый в массив @accounts, а также распечатать их на моем экране.Perl File Reading Line By Line (RegEx)

Хотя я не получаю никакого результата. Я должен сделать здесь простую ошибку?

#!/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 "; 
    } 
} 

ответ

3

1) Не используйте bareword:

дескрипторы файлов
open my $INFILE, '<', $fname 
    or die "Couldn't open $fname: $!"; 

2) @match ?? Вы использовали флаг g, поэтому @matches будет лучшим именем. Как правило, имена массивов будут множественными.

3) Избегайте использования $ _ в вашем коде:

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

для и Еогеасп одно и то же в Perl, так что используйте для - он короче типа.

4)

$ начать = '">';

Вы уверены, что вы хотите посмотреть на кавычками сопровождаемого> ?? Ваш код работает отлично для меня этот файл данных:

<option">hello world</option> 

Однако, что некоторые странно выглядящие данные

+0

Хорошо спасибо я попробую это. Дело в том, что я использовал это регулярное выражение, потому что я не был уверен в том, как это сделать: Фактическое регулярное выражение - это что-то вроде опции value = "55"> hello , хотя дело в каждой строке, что 55 - это другое number.how я бы получил привет от этого? – n0de

+0

Ну, тогда разместите строку в файле данных и опишите, что вы хотите сопоставить. – 7stud

+0

Если вы пытаетесь сопоставить текст только с тегами опций, вы можете использовать регулярное выражение следующим образом://x. Но, как правило, существуют синтаксические анализаторы html/xml, которые обрабатывают все сложные регулярные выражения и специальные случаи для вас, поэтому вы должны их использовать, например. HTML :: Parser. – 7stud

0
. 10

Производит:

AAAA 
BBBB 
CCCC