我想匹配008/的Preg匹配斜杠
preg_match('/008\\//i', '008/', $matches);
preg_match('/008\//i', '008/', $matches);
我的问题是,为什么这两个正则表达式的工作。我期望第二个工作,但为什么双反斜杠有效?
我想匹配008/的Preg匹配斜杠
preg_match('/008\\//i', '008/', $matches);
preg_match('/008\//i', '008/', $matches);
我的问题是,为什么这两个正则表达式的工作。我期望第二个工作,但为什么双反斜杠有效?
因为PHP中的\\
字符串意味着“逃避反斜杠”。由于\/
并不意味着任何它不需要逃脱(即使可能),所以他们的评估是一样的。
换句话说,这两个将打印同样的事情:
echo '/008\\//i'; // prints /008\//i
echo '/008\//i'; // prints /008\//i
反斜线one of the few characters that can get escaped in a single quoted string(除了明显的\'
),这能确保你可以做一个字符串,如'test\\'
没有最后逃脱引用。
正斜杠确实需要在由'/'分隔的正则表达式中转义。你是正确的,因为最终的结果是一样的,而且这是传递给PCRE代码的字符串。 – miken32
是的,我的意思是说因为'\'不会评估任何特殊的东西,所以它和''\\ /''具有相同的效果。很显然,这个特定的正则表达式需要转义斜线,并且这两个例子都是这样做的,这就是为什么两者都工作(它们是相同的)。 –
你问题中的例子试图匹配正斜杠而不是反斜杠。 – Barmar
为防万一你不知道,作为分隔符的'/'完全是任意的。当我搜索包含斜杠的东西时,我经常会做'preg_match('#008 /#',$ string,$ matches)''这样我就可以避免转义。 – miken32