2

This is my code:

$html = 'Is this a question? Maybe.';
$old = 'question?';
$new = 'reply?';

$html =~ s/$old/$new/g;
print $html; exit;

Output is:

Is this a reply?? Maybe.

Desired ouput:

Is this a reply? Maybe.

What am I doing wrong? Thank you.

4

3 回答 3

9

使用quotemeta转义?

$html = 'Is this a question? Maybe.';
$old = quotemeta 'question?';
$new = 'reply?';

$html =~ s/$old/$new/g;
print $html; exit;
于 2013-08-26T17:19:23.993 回答
6

在正则表达式中,问号是表示one 或 none的运算符。因此,我们必须逃避它:

s/question\?/reply?/g

请注意,它在字符串中并不特殊。因为将随机字符串内插到正则表达式中可能会产生这种不良影响,所以您应该quotemeta首先使用它们。

  • 通过使用以下quotemeta功能:$old = quotemeta "question?"
  • 或者通过使用\Q...\E正则表达式中的区域:

    s/\Q$old\E/$new/g
    
于 2013-08-26T17:21:18.763 回答
2

?在正则表达式中有特殊含义。你只需要在你的模式中转义它:

$old = 'question\?';
于 2013-08-26T17:20:11.493 回答