如何在PHP的行开头匹配反斜杠

时间:2013-06-11 19:21:07

标签: php regex preg-match delimiter backslash

在看到我们的apache日志中出现的一些错误之后,我一直在试图找出'为什么'。与preg_match命令相关的错误,我试图找到以反斜杠字符开头的字符串:

preg_match('/^\\/',$str)

报告“preg_match():没有结束分隔符'/'找到了”

出于好奇,我尝试了双引号而不是单引号,以及1到6个反斜杠的组合,它总是报告相同的错误。 (我最终将测试切换到if(substr($ str,0,1)==“\”){}而不是暂时)

4 个答案:

答案 0 :(得分:6)

这是因为PHP中的字符串文字中的\\被翻译为单个\

因此,您的正则表达式为/^\/,其中\使得尾部斜杠字面翻译为斜杠而不是结尾分隔符。这使得正则表达式没有结束分隔符,因此PCRE抱怨。

你想要的结果是/^\\/,要把它放在一个字符串文字中你需要加倍反斜杠,所以:

preg_match('/^\\\\/',$str)

也就是说,if($str[0] === '\\')更容易阅读,执行起来更快。

答案 1 :(得分:1)

因为\\将作为单个\转义,您需要执行此操作:

preg_match('/^\\\\/',$str)

答案 2 :(得分:0)

好的,奇怪的是,我刚从头开始再次运行我的测试,并且这次使用了4个反斜杠,正如我预期的那样。我最初的想法是单引号仍然使用第一个\来限定第二个。所以我尝试了四个,但必须在语法中搞砸其他东西。

if(preg_match('/^\\\\/', $str)) {}

以上作品。

答案 3 :(得分:-2)

我认为这可能与'(单引号)

有关

尝试将它们更改为双引号"。两个\就足够了。