2013-04-20 5 views
1

내가하려는 것은 파일을 열고 한 줄씩 읽는 것입니다.
일단 정규 표현식이 찾고있는 것을 발견하면 각 배열을 @accounts 배열에 배치하고 내 화면에 인쇄하려고합니다.Perl 파일 읽기 라인 (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가 더 나은 이름이됩니다. 일반적으로 배열 이름은 복수형이 될 것입니다.

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

및 foreach는 펄에서 같은 일을, 그래서 사용 -이 입력하는 짧은입니다 :

3) 코드에서 $ _를 사용하지 마십시오.

4)

$를 = ''> '를 시작,

당신은 당신이 A> ?? 귀하의 코드 다음에 따옴표를 찾아하겠습니까 것은 나를 위해 잘 작동 이 데이터 파일 :

<option">hello world</option> 

그러나, 몇 가지 이상한 찾고 데이터입니다

+0

좋아, 당신을 감사합니다. 문제는 내가이 정규식을 사용했기 때문입니다. 실제 정규식은 55 = 0 인 hello 과 같지만 55는 다른 점이 있습니다. 번호. 안녕하세요? – n0de

+0

그럼 데이터 파일에 한 줄을 올리고 일치시키려는 내용을 설명하십시오. – 7stud

+0

옵션 태그 사이에서만 텍스트를 일치시키려는 경우//x와 같은 정규식을 사용할 수 있습니다. 하지만 일반적으로 모든 복잡한 정규식과 특수한 경우를 처리하는 html/xml 파서가 있으므로 사용할 수 있습니다 (예 : HTML :: 파서. – 7stud

0
,832. 10

는 생산 : 나는 그것을 시도 할 것이다

AAAA 
BBBB 
CCCC