在看到我们的apache日志中出现了一些错误后,我一直在试图找出“原因”。这些错误与我试图查找以反斜杠字符开头的字符串的preg_match命令有关:
preg_match('/^\\/',$str)它报告"preg_match():找不到结束分隔符'/‘“
出于好奇,我尝试了双引号而不是单引号,以及1到6个反斜杠的组合,但总是报告相同的错误。(我暂时将测试切换到if(substr($str,0,1) == "\") {} )
发布于 2013-06-12 03:24:59
这是因为PHP会将字符串文字中的\\转换为单个\。
因此,您的正则表达式是/^\/,其中\使尾部斜杠从字面上转换为斜杠,而不是结束分隔符。这使得正则表达式没有结束分隔符,因此PCRE会抱怨。
您希望得到的结果是/^\\/,要将其放入字符串字面量中,您需要将反斜杠加倍,因此:
preg_match('/^\\\\/',$str)也就是说,if($str[0] === '\\')更容易阅读,执行起来也更快。
发布于 2013-06-12 03:25:22
由于\\将作为单个\进行转义,因此您需要执行以下操作:
preg_match('/^\\\\/',$str)发布于 2013-06-12 03:26:10
好吧,奇怪的是,我只是从头开始运行我的测试,这次像我预期的那样使用了4个反斜杠。我最初的想法是,单引号仍然使用第一个\来限定第二个。所以我试了四次,但一定是在语法上搞错了什么。
if(preg_match('/^\\\\/', $str)) {}上面的方法是可行的。
https://stackoverflow.com/questions/17052055
复制相似问题