2014-02-11 3 views
0

텍스트 상자를 만들었습니다. 텍스트 파일을 읽고 Perl을 사용하여 텍스트와 각 행을 비교하여 텍스트 상자에 사용자가 작성한 내용을 제어하려고합니다. 내 코드에서 나는 param('text') 파일을 읽는 동안 나는 아무 문제가펄에서 파일 판독기를 사용하여 행 찾기

open(DATA, "<baba.txt") or die "Couldn't open file file.txt, $!"; 
while(<DATA>) 
{ 
    if($_=~param('text')) 
    { 
     print $_; 
    } 
} 

가득하지만 난 경기를 처리 할 수 ​​있습니다. 그것은 아무것도 반환하지 않았다.

내 코드가 잘못되었습니다.

답변

1

= ~ 연산자의 오른쪽은 정규 표현식이어야합니다.

자세한 내용은 this site을 참조하십시오.

+1

's의/좌/우 /' – ThisSuitIsBlackNot

+0

감사합니다, 내가 편집 한 내 대답 - – OlivierLi

1
while (<DATA>) 
{ 
    chomp; 
    if (param('text') =~ /\Q$_/) 
    { 
     print $_; 
    } 
} 
+0

실제로 사용자 게시물 표시가 1990 년 이고 제어하기를 원하기 때문에 내 상황에 충분하지 않습니다. 1990 년 – user3297904

+0

@ user3297904 파일에서 몇 줄을 게시하고 사용자 입력 예제를 게시 할 수 있습니다. –

+0

그들은 1990 년, 스티브 1890을 게시하고 내 텍스트 파일에는 1990 년 1 월 1890 년 1991 년에 모든 행에 날짜가 하나만 있습니다. – user3297904

0

아마도 다음은 도움이 될 것입니다 :

use strict; 
use warnings; 

my $text = <<END; 
This is just a BU.NCH of text 
in a here document that will 
be used for some matching in 
just a little bit. 
END 

while (<DATA>) { 
    chomp; 
    if ($text =~ /\b\Q$_\E\b/i) { 
     print $_, "\n"; 
    } 
} 

__DATA__ 
this 
some 
bu.nch 
a 
hello 
world 

출력 :

this 
some 
bu.nch 
a 

파일에서 읽은 단어를 일치하도록 시도하기 전에, 당신이 chomp 그것을 필요는 제거하기 레코드 구분 기호 (있는 경우)는 보통 \n입니다. 몇 가지 다른 항목은 고려하는도 있습니다

  1. 당신이 단어의 경계를 강제 것은 방지 할
  2. 존재할 수있는 단어의 모든 메타 문자를 이스케이프 대소 문자를 구분하지 일치
  3. 을할지 여부 문자열 일치.

위의 항목 (1)은 /i 수정자를 사용하여 얻을 수 있습니다. 항목 (2)는 \Q$_\E (\Q uote-meta; \E nd Quote-meta)와 같이 정규식에서 '단어'를 묶어서 수행합니다. 마지막으로 \b : \b\Q$_\E\b을 사용합니다.

희망이 도움이됩니다. > $ _ = ~ PARAM ('텍스트')하지 정규 표현식 검색

0

my $text = param('text'); 

open(DATA, "<baba.txt") or die "Couldn't open file file.txt, $!"; 
while(<DATA>) 
{ 
    if($_=~ /$text/) 
    { 
     print $_; 
    } 
} 

때문에 이것을 시도.