Preg匹配正斜杠

Som*_*omk 6 php regex

我想要匹配008 /

preg_match('/008\\//i', '008/', $matches);
preg_match('/008\//i', '008/', $matches);
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么两个正则表达式都有效.我希望第二个工作,但为什么双反斜杠工作?

Mat*_*s-S 5

因为\\在PHP字符串中意味着"逃避反斜杠".因为\/并不意味着它不需要被转义(即使它是可能的),所以他们评价相同.

换句话说,这两个都会打印相同的东西:

echo '/008\\//i'; // prints /008\//i
echo '/008\//i';  // prints /008\//i
Run Code Online (Sandbox Code Playgroud)

反斜杠是可以在单引号字符串中转义的少数字符之一(除了显而易见的\'),这确保您可以创建一个字符串,例如'test\\'不转义最后一个引号.