我真的把我的屁股踢到了这里。我无法弄清楚如何编写搜索和替换将正确找到此字符串。
字符串:
$QData{"OrigFrom"} $Text{"wrote"}:
注意:这是实际的STRING。那些不是变量。我没有写。
我需要用任何东西替换那个字符串。我试过逃避$,{和}。我尝试了各种组合,但它无法正确使用。
有人想在那里捅一下吗?
谢谢!
答案 0 :(得分:4)
没有人喜欢quotemeta?让Perl弄明白,这样你就不会用所有那些反斜杠拉伤你的眼睛。 :)
my $string = 'abc $QData{"OrigFrom"} $Text{"wrote"}: def';
my $escaped = quotemeta '$QData{"OrigFrom"} $Text{"wrote"}:';
$string =~ s/$escaped/Ponies!/;
print $string;
答案 1 :(得分:3)
我原本以为将你的正则表达式包裹在\Q
/ \E
(quotemeta开始和结束转义)中就是你需要做的所有事情,但事实证明$
(并且@
)不是
在\Q...\E
个序列中允许(请参阅http://search.cpan.org/perldoc/perlre#Escape_sequences)。
所以你需要做的是分别逃避$
个字符,但你可以将其他所有内容包装在\Q ... \E
中:
/\$\QQData{"OrigFrom"} \E\$\QText{"wrote"}:\E/
答案 2 :(得分:1)
s/\$QData\{"OrigFrom"\} \$Text\{"wrote"\}://;
完整的测试代码:
#!/sw/bin/perl
$_='$QData{"OrigFrom"} $Text{"wrote"}:';
s/\$QData\{"OrigFrom"\} \$Text\{"wrote"\}://;
print $_."\n";
只输出换行符。