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.