[问题] 搜寻取代字串包含双引号

楼主: cenda (十八尖山下智缺)   2012-10-05 15:48:33
小弟是Perl的初学者
都是靠GOOGLE大神教我的
这边我遇到一个问题
就是我在搜寻字串并且取代的时候
因为要搜寻的字串包含双引号 "
所以一直无法正确搜寻并且取代
请高手赐教 感谢
my $ps = qq/system("ps >& ps.log");/;
my $markps = qq/#system("ps >& ps.log");/;
open (PS, "<A.pl");
my @PS =<PS>;
close (PS);
for my $RegLine(@PS)
{
if ($RegLine =~ s/$ps/$markps/g)
{
open (PS, ">A.pl");
print PS @PS;
close (PS);
}
}
作者: cibs (0)   0000-00-00 00:00:00
试试 my $ps = qq/system\\("ps >& ps.log"\\);/;以 \ 在 qq// 里面让 \ 跳脱出来再以刚刚跳脱后的 \ 在 s/// 里面让 ( 和 ) 跳脱出来
作者: micangela (嘟)   0000-00-00 00:00:00
可以使用 $RegLine =~ s/\Q$ps\E/$markps/g\Q...\E 能把所有东西跳脱开来详情可搜寻quotemeta
作者: flu (Crazy Rhythm)   0000-00-00 00:00:00
不用\Q...\E的话 $ps中的() 就要作escape刚刚发现从perl 5.14~5.16 quotemeta()的说明篇幅多了不少
楼主: cenda (十八尖山下智缺)   0000-00-00 00:00:00
多谢指教~~ 我再去研究一下quotemeta !

Links booklink

Contact Us: admin [ a t ] ucptt.com