0

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

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

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

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

4

4 回答 4

6

这是因为内部字符串文字被PHP\\转换为单个字符串。\

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

您想要的结果是/^\\/,并且要将其放在字符串文字中,您需要将反斜杠加倍,因此:

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

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

于 2013-06-11T19:24:59.407 回答
1

因为\\将作为一个单一的逃脱\你需要做:

preg_match('/^\\\\/',$str)
于 2013-06-11T19:25:22.173 回答
0

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

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

以上工作。

于 2013-06-11T19:26:09.807 回答
-2

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

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

于 2013-06-11T19:24:50.333 回答