下面是我的脚本,它根据注释列表扫描输入文件的每一行。每一次出现 我从带有注释标记的行标记术语。正则表达式完美没有\ 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";
}
答案 0 :(得分:4)
我的猜测是你的$value
包含正则表达式元字符。这很容易解决;在匹配前使用$value = quotemeta $value;
并完全省略\Q...\E
,或仅将\Q...\E
放在$value
周围:$_ =~ s/\b[\w\-]*\Q$value\E[\w\-]*\b/.../ig;