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