2017-11-17 5 views
-2

사용자가 제공 한 패턴을 포함하는 구성 파일이 있습니다. 기본적으로 패턴은 알파벳, 숫자, 공백, 반드시 닫히지 않는 괄호 및 특수 문자의 조합 일 수 있습니다. 패턴 예 : <Error my (error** fail& 345% ?+[+?>패턴이 변수에있을 때 perl에서 복잡한 알려지지 않은 패턴을 비교하는 방법은 무엇입니까?

저는이 문제를 해결하기가 매우 쉽습니다. 코드의

내 조각 :

for (<FH>) { 
    for (my $j = 0 ; $j < $num_pat ; $j = $j + 1) { 
     print "This is the pattern : $pat_array[$j] \n"; 
     if ($_ =~ m/'$pat_array[$j]'/) { 
      print "$_ : match found for $pat_array[$j] \n"; 
      #print "KPI for the pattern is : $kpi_array[$match] : array style \n"; 
      $match_count[$j] = ($match_count[$j] + 1); 
     } 
    } 
} 

패턴 배열은 여러 패턴을 가지고있다. ($ _ = ~ m/'$ pat_array [$ j]'/) 간단한 패턴에서는 작동하지만 예제에서는 작동하지 않습니다.

더 자세히 진행하도록 도와주세요.

+0

패턴이 일치하지 않는 이유에 대해 의미있는 대답을 제공하려면 예제 데이터가 필요합니다. 그러면 Google에서 알려 드릴 수 있습니다. 아마도 당신이'$ pat_array [$ j]'를 인용했기 때문에 아마 말 하겠지만 당신이 메타 문자를 제대로 벗어나지 못했을 수 있습니다. – Sobrique

+0

당신이 준 예제는 유효한 정규식이 아닙니다. - ** **는 절대 이스케이프되지 않으면 허락되지 않습니다. –

+0

"복잡한 미지의 정규식 패턴"이 아니기 때문에이 질문을 명확히하지 않기로했습니다. , 그것은 단순히 유효한 정규 표현식이 아닙니다. 이 일로 무엇을하려하는지 또는 무엇을하고 싶은지는 명확하지 않습니다. – melpomene

답변

2

특수 문자를 인용해야합니다. perldoc -f quotemeta

당신은 또한 같은 속기 \Q$variable\E 구문을 사용할 수 있습니다 참조 :

if ($string =~ m/\Q$pattern\E/) { ... } 

모든 특수 문자는 현재 문자 그대로 일치한다.

+1

또는 하위 문자열 인'index' 만 찾으면됩니다. – melpomene

+0

정말 감사합니다 tinita :) – Ansh007