这是我的代码:
$html = 'Is this a question? Maybe.';
$old = 'question?';
$new = 'reply?';
$html =~ s/$old/$new/g;
print $html; exit;
Run Code Online (Sandbox Code Playgroud)
输出是:
Is this a reply?? Maybe.
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Is this a reply? Maybe.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?谢谢.
使用quotemeta来逃避?:
$html = 'Is this a question? Maybe.';
$old = quotemeta 'question?';
$new = 'reply?';
$html =~ s/$old/$new/g;
print $html; exit;
Run Code Online (Sandbox Code Playgroud)
在正则表达式中,问号是一个运算符,表示一个或没有.因此,我们必须逃脱它:
s/question\?/reply?/g
Run Code Online (Sandbox Code Playgroud)
请注意,它在字符串中并不特殊.因为将随机字符串插入到正则表达式中可能会产生不必要的影响,所以首先应该使用quotemeta它们.
quotemeta功能:$old = quotemeta "question?"或者通过使用\Q...\E正则表达式中的区域:
s/\Q$old\E/$new/g
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3132 次 |
| 最近记录: |