0

以下は、注釈のリストに対して入力ファイルの各行をスキャンする私のスクリプトです。出現するたびに、行の用語に注釈タグを付けます。正規表現は\Q.. \ E演算子がなくても完全に機能しますが、\ Q ..\EIを含めないと範囲エラーが発生します。したがって、以下の状況では、置換を有効に保つと同時に、範囲を管理する必要があります。質問が明確であることを願っています。

 while (<FILE>) {

     chomp $_;

     foreach $word (@array) {

         @cells   = split /\t/, $word;
         $value   = $cells[0];
         $replace = $cells[1];

         chomp $value;
         chomp $replace;
         $_=~s/\Q\b[\w\-]*$value[\w\-]*\b\E)/<$replace>$&<\\$replace>/ig;
     }
     print $_,"\n"; 
 }
4

1 に答える 1

4

私の推測では、$value正規表現のメタ文字が含まれていると思います。これは簡単に解決できます。$value = quotemeta $value;一致する前に使用して\Q...\E完全に除外するか、\Q...\E前後に$valueのみ配置します。$_ =~ s/\b[\w\-]*\Q$value\E[\w\-]*\b/.../ig;

于 2012-10-23T19:17:28.023 に答える