使用\ Q ... \ E使正则表达式无效Perl

时间:2012-10-23 19:14:13

标签: regex perl escaping

下面是我的脚本,它根据注释列表扫描输入文件的每一行。每一次出现 我从带有注释标记的行标记术语。正则表达式完美没有\ Q .. \ E运算符,但如果我不包括\ Q .. \ E我得到范围错误。所以在下面的情况下,我必须保持替换有效,同时照顾范围。希望问题很清楚。

 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"; 
 }

1 个答案:

答案 0 :(得分:4)

我的猜测是你的$value包含正则表达式元字符。这很容易解决;在匹配前使用$value = quotemeta $value;并完全省略\Q...\E,或仅将\Q...\E放在$value周围:$_ =~ s/\b[\w\-]*\Q$value\E[\w\-]*\b/.../ig;