在正则表达式中,有时我遇到正斜杠,我试图使用一个反斜杠和两个反斜杠来逃避它,并意识到返回是相同的。所以我想更清楚地理解它。
示例代码:
var_dump(preg_match("/^\\/$/D", "/"));
var_dump(preg_match("/^\/$/D", "/"));
他们都提供相同的输出
int(1)
在我的理解中,用两个反斜杠转义它似乎是正确的,因为当PHP解析字符串时,第一个反斜杠(\)转义第二个反斜杠(\),并且在解析正则表达式时反斜杠(\)然后转义正斜杠( /).
它们之间有什么区别吗?谢谢。
答案 0 :(得分:2)
那是完全一样的。
在引号或heredoc字符串中,您可以使用一个或两个反斜杠来计算字面反斜杠。这种特殊性是由于反斜杠用作这种字符串的转义字符。您可以显示字符串以确认此事实。
很好,正则表达式引擎只接收一个反斜杠,在两种情况下都会转义分隔符/
。
注意:要计算用引号字符串编写的模式的文字反斜杠,您需要3或4个反斜杠(因为反斜杠也是模式的转义字符,必须再次转义):
var_dump(preg_match('~^a\\\o$~', 'a\o'));
var_dump(preg_match('~^a\\\\o$~', 'a\o'));
var_dump(preg_match('~^a\\\o$~', 'a\\o'));
var_dump(preg_match('~^a\\\\o$~', 'a\\o'));
与任何其他字符一样,要在引号字符串中设置反斜杠,您只需要编写一次,但由于此字符用于转义,因此您需要有时间写两个反斜杠以消除歧义,特别是在跟随转义序列时。例子:
echo "a\b"; # a\b
echo 'a\b'; # a\b
echo "a\\b"; # a\b
echo 'a\\b'; # a\b
echo "a\tb"; # a b
echo "a\\tb"; # a\tb
echo "a\\\tb"; # a\ b
echo 'a\'b'; # a'b
echo 'a\\'b'; # parse error
echo 'a\\\'b'; # a\'b
注意:唯一的wysiwyg字符串是nowdoc字符串:
echo <<<'EOD'
\\
EOD;
# \\