Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用preg_replace替换反斜杠字符_Php_Regex - Fatal编程技术网

Php 用preg_replace替换反斜杠字符

Php 用preg_replace替换反斜杠字符,php,regex,Php,Regex,我有一段代码: $data = 'Test\\vv testing\\vv'; $data = preg_replace('/(\\vv)/', '\test', $data); 然而,在preg_replace之后,$data仍然是Test\vv testing\vv 我不明白为什么在任何正则表达式测试仪上,正则表达式都匹配我要替换的字符串部分,即“\v”部分。PHP的解析器和正则表达式引擎(PCRE)都认为反斜杠字符(\)是转义字符。如果您编写一个反斜杠字符,PHP解析器会

我有一段代码:

$data = 'Test\\vv testing\\vv';
        $data = preg_replace('/(\\vv)/', '\test', $data);
然而,在preg_replace之后,$data仍然是Test\vv testing\vv

我不明白为什么在任何正则表达式测试仪上,正则表达式都匹配我要替换的字符串部分,即“\v”部分。

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

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

从:

单引号和双引号PHP字符串具有反斜杠的特殊含义。因此,如果必须将
\
与正则表达式
\\
匹配,则必须在PHP代码中使用
“\\\\\”
“\\\\\”

您的代码应该是:

$data = preg_replace('/(\\\\vv)/', '\replaced', $data);


注意:正如Bob0t在评论中正确指出的那样,此任务不需要
preg_replace()
,因为它只涉及普通字符串而不涉及模式。简单的“ol”就足够了:

$data = str_replace('\\vv', '\test', $data);
在PHP中,您可以使用:

$re = "/\\\\vv/"; 
$str = "Test\\vv testing\\vv"; 
$subst = '\\replaced'; 
 
$result = preg_replace($re, $subst, $str);
在PHP中,需要使用
\\\\\
来匹配单个反斜杠
\
。这是因为第一个转义符用于PHP字符串,第二个转义符用于底层PCRE正则表达式引擎


当您可以使用
str\u replace('\\vv','\test',$data)时,为什么要使用preg replace?因为我需要它来做其他更大的事情。我只取了正则表达式的一小部分,我知道它会引起问题。那么你能给我们看一下“更大的”
$data
?只是好奇,我很确定你不用正则表达式也能做到:再详细解释一下,很快你就可以把它们编译成手册了。:)+1.