2011-10-09 3 views
4

하나의 파일에서 단어/기호 목록을 읽고 다른 텍스트 본문에서 각각을 검색하는 프로그램 작성.perl에서 괄호 검색

while(<FILE>){ 
    $findword = $_; 

    for (@text){ 
     if ($_=~ /$find/){ 
      push(@found, $_); 
     } 
    } 
} 

는 그러나, 나는이 문제에 실행 한 번에 표시 괄호 :

는 그래서 같은 것이 있습니다.

Unmatched (in regex; marked by <-- HERE in m/(<-- HERE 

나는 펄이 (는 정규식의 일부입니다 생각하기 때문에 그것의 실현,하지만 난 이것에 어떻게 대처 않으며 ( 검색을 : 그것은 나를이 오류를 준다? 일반적으로 백 슬래시에서

+0

regex 메타 문자가 메타가되는 것을 원하지 않으면 정규식을 전혀 사용하지 마십시오. @mu의 두 번째 부분은 너무 짧습니다. 당신이하고자하는 일에 적합한 것입니다 (훨씬 더 빠를 것입니다). – tadmc

답변

3

정규 표현식에 내부 문자를 이스케이프 - /\(/이 같은 상황에서 문자 (

일치합니다 즉이 교대로 사용하는 인용 운영자에게

if ($_ =~ /\Q$find\E/) { 
    ... 
} 

를 사용하는 것이 좋습니다 quotemeta

2

당신에게 ' /$find/ 대신 /\Q$find\E/을 쓰고 싶습니다. \Q은 메타 분석을 중지하도록 파서에 지시합니다. 그것은 \E을 찾을 때까지 정규 표현식의 일부로 표현합니다.

1

다른 펄 정규식 메타 문자가 메타 문자로 해석되기를 원하지 않는 한 m/\Q$find\E/이 유용하다고 생각됩니다. \e

if(index($_, $find) >= 0) { 
4

당신은 \Q and \E 사용할 수 있습니다 like :

while(<FILE>){ 
    $findword = $_; 

    for (@text){ 
     if ($_=~ /\Q$find\e/){ 
      push(@found, $_); 
     } 
    } 
} 
+1

예, 상수 문자열을 찾고 있다면 인덱스가 있습니다. – Alex

0

\Q$find 변수에 특별한 문자를 탈출한다 : 당신은 그냥 문자 그대로의 일치를 찾고 있다면

if ($_ =~ /\Q$find\E/){ 

을하거나 index를 사용