2017-11-17 1 views
-2

ユーザーが提供するパターンを含む設定ファイルがあります。基本的には、パターンは何でもかまいません。アルファベット、数字、空白、必ずしも閉じていない括弧、特殊文字の組み合わせでもかまいません。 パターン例:<Error my (error** fail& 345% ?+[+?>パターンが変数にあるときに、perlで複雑な未知パターンを照合する方法は?

私は非常に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

パターンが一致しない理由について意味のある回答を得るには、サンプルデータが必要です。おそらく '$ pat_array [$ j]'を引用していると言えますが、メタ文字を正しくエスケープしていない可能性があります。 – Sobrique

+0

あなたが与えた例は間違いなく有効な正規表現ではありません - '**'は間違いなくエスケープされないと許可されていません –

+0

あなたが持っているものは「複雑な未知の正規表現パターン」ではないので、 、それは単に有効な正規表現ではありません。これで何をしようとしているのか、何をしたいのかははっきりしません。 – melpomene

答えて

2

特殊文字を引用する必要があります。任意の特別な文字は今、文字通りマッチします

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

: あなたはまた、そのような速記\Q$variable\E構文を使用することができますperldoc -f quotemeta

を参照してください。

+1

または、部分文字列 'index'だけを探しているのであれば。 – melpomene

+0

ありがとうso much tinita :) – Ansh007

関連する問題