// 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 '\'后跟一个's'。
echo preg_match( '/\\\\s/', '\\ ' ); // 0
echo preg_match( '/\\\\s/', '\\s' ); // 1
当使用四个反斜杠匹配时'\',下面的模式被解释为匹配a '\'后跟空格字符。
echo preg_match( '/\\\\\s/', '\\ ' ); // 1
echo preg_match( '/\\\\\s/', '\\s' ); // 0
如果在字符类中,则同样适用。
echo preg_match( '/[\\\\s]/', ' ' ); // 0
echo preg_match( '/[\\\\\s]/', ' ' ); // 1
将字符串括在double而不是单引号中会影响上述结果。
结论:
无论是在括号内的字符类的内部还是外部,只使用三个反斜杠就可以匹配文字反斜杠,'\\\'除非模式中的下一个字符也被反斜杠,在这种情况下,必须使用四个反斜杠匹配文字反斜杠。
建议:在寻求匹配反斜杠时,
始终使用'\\\\'正则表达式中的四个反斜杠。