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 回答