这是我的代码:
$html = 'Is this a question? Maybe.';
$old = 'question?';
$new = 'reply?';
$html =~ s/$old/$new/g;
print $html; exit;
输出是:
Is this a reply?? Maybe.
期望的输出:
Is this a reply? Maybe.
我做错了什么?谢谢。
答案 0 :(得分:9)
使用quotemeta转义?
:
$html = 'Is this a question? Maybe.';
$old = quotemeta 'question?';
$new = 'reply?';
$html =~ s/$old/$new/g;
print $html; exit;
答案 1 :(得分:6)
在正则表达式中,问号是一个运算符,意思是 one或none 。因此,我们必须逃脱它:
s/question\?/reply?/g
请注意,它在字符串中并不特殊。因为将随机字符串插入到正则表达式中会产生不必要的影响,所以首先应quotemeta
它们。
quotemeta
函数:$old = quotemeta "question?"
或者在正则表达式中使用\Q...\E
区域:
s/\Q$old\E/$new/g
答案 2 :(得分:2)
?
在正则表达式中具有特殊含义。你只需要在你的模式中逃避它:
$old = 'question\?';