// 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 
将字符串用双引号而不是单引号括起来不会影响上述结果。
结论:
无论是在括号字符类的内部还是外部,文字反斜杠都可以仅使用三个反斜杠匹配,'\\\'除非模式中的下一个字符也是反斜杠,在这种情况下,文字反斜杠必须使用四个反斜杠匹配。
建议:在寻求匹配反斜杠时,
始终在正则表达式模式中使用四个反斜杠。'\\\\'
转义序列。