我有这段代码:
$data = 'Test\\vv testing\\vv';
$data = preg_replace('/(\\vv)/', '\test', $data);
Run Code Online (Sandbox Code Playgroud)
然而在preg_replace之后,$ data仍然是Test\vv testing\vv.
我不明白为什么在任何正则表达式测试器上,正则表达式匹配我要替换的字符串部分,即'\ v'部分.
\PHP的解析器和正则表达式引擎(PCRE)都将反斜杠字符()视为转义字符.如果您编写一个反斜杠字符,它将被PHP解析器视为转义字符.如果你写两个反斜杠,它将被PHP的解析器解释为文字反斜杠.但是当在正则表达式中使用时,正则表达式引擎也会将其作为转义字符进行选择.
因此,为了匹配PHP正则表达式中的文字反斜杠,您需要编写四个斜杠\\\\:
单引号和双引号PHP字符串具有反斜杠的特殊含义.因此,如果
\必须与一个正则表达式匹配\\,则"\\\\"或者'\\\\'必须在PHP代码中使用.
你的代码应该是:
$data = preg_replace('/(\\\\vv)/', '\replaced', $data);
Run Code Online (Sandbox Code Playgroud)
注:由于Bob0t在评论正确地说,你不是需要preg_replace()完成这个任务,因为它不仅涉及普通字符串,而不是模式.一个简单的'ol str_replace()就足够了:
$data = str_replace('\\vv', '\test', $data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |