用preg_replace替换反斜杠字符

Sef*_*fam 0 php regex

我有这段代码:

$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'部分.

Ama*_*ali 6

\PHP的解析器和正则表达式引擎(PCRE)都将反斜杠字符()视为转义字符.如果您编写一个反斜杠字符,它将被PHP解析器视为转义字符.如果你写两个反斜杠,它将被PHP的解析器解释为文字反斜杠.但是当在正则表达式中使用时,正则表达式引擎也会将其作为转义字符进行选择.

因此,为了匹配PHP正则表达式中的文字反斜杠,您需要编写四个斜杠\\\\:

Escape序列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)