为什么php中3个反斜杠等于4个反斜杠?

oli*_*ver 5 php regex backslash

<?php
$a='/\\\/';
$b='/\\\\/';
var_dump($a);//string '/\\/' (length=4)
var_dump($b);//string '/\\/' (length=4)
var_dump($a===$b);//boolean true
?>
Run Code Online (Sandbox Code Playgroud)

为什么PHP中带有3个反斜杠的字符串等于带有4个反斜杠的字符串?

我们可以在正则表达式中使用 3 个反斜杠版本吗?

PHP参考资料 说我们必须使用 4 个反斜杠。

注意:单引号和双引号 PHP 字符串具有反斜杠的特殊含义。因此 if\必须与正则表达式匹配\\,那么PHP 代码中必须使用"\\\\"or 。'\\\\'

Vol*_*erK 4

$b='/\\\\/';
Run Code Online (Sandbox Code Playgroud)

php 逐个字符地解析字符串文字(或多或少)。第一个输入符号是正斜杠。结果是(解析步骤的)结果中的正斜杠,并且输入符号(一个字符,/)从输入中被删除。
下一个输入符号是反斜杠。它是从输入中获取的,并检查下一个字符/符号。它也是一个反斜杠。这是一个有效的组合,因此第二个符号也从输入中获取,结果是一个黑斜杠(对于两个输入符号)。
第三个和第四个反斜杠也是如此。
最后一个输入符号(在文字内)是结果中的正斜杠 -> 正斜杠。
->/\\/

现在对于带有三个反斜杠的字符串:

$a='/\\\/';
Run Code Online (Sandbox Code Playgroud)

php“找到”第一个黑斜杠,下一个字符是黑斜杠 - 这是一个有效的组合,导致结果中只有一个黑斜杠,并且输入文字中的两个字符都被采用。然后,php“找到”第三个黑斜杠,下一个字符是正斜杠,这不是有效的组合。所以结果是一个黑斜杠(因为 php 喜欢并原谅你......)并且只从输入中取出一个字符。下一个输入字符是正斜杠,导致结果中出现正斜杠。
->/\\/

=> 两个文字编码相同的字符串。