Php 预匹配前斜杠

Php 预匹配前斜杠,php,regex,Php,Regex,我正在努力匹配008/ preg_match('/008\\//i', '008/', $matches); preg_match('/008\//i', '008/', $matches); 我的问题是为什么这两个正则表达式都可以工作。我希望第二个能起作用,但为什么双反斜杠1能起作用呢?因为PHP字符串中的\表示“转义反斜杠”。因为\/并不意味着它不需要转义(即使可能),所以它们的计算结果是相同的 换言之,这两个文件将打印相同的内容: echo '/008\\//i'; // prints

我正在努力匹配008/

preg_match('/008\\//i', '008/', $matches);
preg_match('/008\//i', '008/', $matches);

我的问题是为什么这两个正则表达式都可以工作。我希望第二个能起作用,但为什么双反斜杠1能起作用呢?

因为PHP字符串中的
\
表示“转义反斜杠”。因为
\/
并不意味着它不需要转义(即使可能),所以它们的计算结果是相同的

换言之,这两个文件将打印相同的内容:

echo '/008\\//i'; // prints /008\//i
echo '/008\//i';  // prints /008\//i

反斜杠是(除了明显的
\'
),它确保您可以在不转义最后一个引号的情况下生成一个字符串,如
'test\\\'

问题中的示例是尝试匹配正斜杠,而不是反斜杠。如果您不知道,
//code>作为分隔符完全是任意的。当我搜索包含斜杠的内容时,我通常会做一些类似于
preg_match('.'008/#',$string,$matches)
的操作,这样我就可以避免转义。但是正斜杠确实需要在由
/
分隔的正则表达式中转义。你是对的,最终结果是一样的,传递给PCRE代码的是这个字符串。是的,我的意思是,由于
'\/'
的计算结果没有任何特殊之处,因此它与
'\\/'
具有相同的效果。显然,这个特殊的正则表达式需要转义正斜杠,这两个例子都是这样做的,这就是为什么两者都可以工作(它们是相同的)。