// PHP 5.4.1
// Either three or four \ can be used to match a '\'.
echo preg_match( '/\\\/', '\\' ); // 1
echo preg_match( '/\\\\/', '\\' ); // 1
// Match two backslashes `\\`.
echo preg_match( '/\\\\\\/', '\\\\' ); // Warning: No ending delimiter '/' found
echo preg_match( '/\\\\\\\/', '\\\\' ); // 1
echo preg_match( '/\\\\\\\\/', '\\\\' ); // 1
// Match one backslash using a character class.
echo preg_match( '/[\\]/', '\\' ); // 0
echo preg_match( '/[\\\]/', '\\' ); // 1
echo preg_match( '/[\\\\]/', '\\' ); // 1
当使用三个反斜杠匹配 a'\'
时,下面的模式被解释为匹配 a'\'
后跟一个's'
。
echo preg_match( '/\\\\s/', '\\ ' ); // 0
echo preg_match( '/\\\\s/', '\\s' ); // 1
当使用四个反斜杠匹配 a'\'
时,下面的模式被解释为匹配 a'\'
后跟一个空格字符。
echo preg_match( '/\\\\\s/', '\\ ' ); // 1
echo preg_match( '/\\\\\s/', '\\s' ); // 0
如果在字符类中也是如此。
echo preg_match( '/[\\\\s]/', ' ' ); // 0
echo preg_match( '/[\\\\\s]/', ' ' ); // 1
将字符串用双引号而不是单引号括起来不会影响上述结果。
结论:
无论是在括号字符类的内部还是外部,文字反斜杠都可以仅使用三个反斜杠匹配,'\\\'
除非模式中的下一个字符也是反斜杠,在这种情况下,文字反斜杠必须使用四个反斜杠匹配。
建议:在寻求匹配反斜杠时,
始终在正则表达式模式中使用四个反斜杠。'\\\\'
转义序列。