在正则表达式中有时我遇到正斜杠,我试图用一个反斜杠和两个反斜杠来转义它,并意识到返回是相同的。所以我想更清楚地了解它。
示例代码:
var_dump(preg_match("/^''/$/D", "/"));
var_dump(preg_match("/^'/$/D", "/"));
它们都给出相同的输出
int(1)
在我的理解中,用两个反斜杠转义它似乎是正确的,因为当PHP解析字符串时,第一个反斜杠(')转义第二个反斜杠('),当解析正则表达式时,反斜杠(')然后转义正斜杠(/)。
它们之间有什么区别吗?谢谢你。
完全一样。
在引号或heredoc字符串中,您可以用一个或两个反斜杠表示文字反斜杠。这种特殊性是由于反斜杠被用作这类字符串的转义字符。您可以显示字符串来确认这一事实。
总之,在这两种情况下,regex引擎只接收一个转义分隔符/
的反斜杠。
注意:为一个用引号括起来的字符串表示的模式,你需要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;
# ''