在看到我们的apache日志中出现的一些错误之后,我一直在试图找出'为什么'。与preg_match命令相关的错误,我试图找到以反斜杠字符开头的字符串:
preg_match('/^\\/',$str)
报告“preg_match():没有结束分隔符'/'找到了”
出于好奇,我尝试了双引号而不是单引号,以及1到6个反斜杠的组合,它总是报告相同的错误。 (我最终将测试切换到if(substr($ str,0,1)==“\”){}而不是暂时)
答案 0 :(得分:6)
这是因为PHP中的字符串文字中的\\
被翻译为单个\
。
因此,您的正则表达式为/^\/
,其中\
使得尾部斜杠字面翻译为斜杠而不是结尾分隔符。这使得正则表达式没有结束分隔符,因此PCRE抱怨。
你想要的结果是/^\\/
,要把它放在一个字符串文字中你需要加倍反斜杠,所以:
preg_match('/^\\\\/',$str)
也就是说,if($str[0] === '\\')
更容易阅读,执行起来更快。
答案 1 :(得分:1)
因为\\
将作为单个\
转义,您需要执行此操作:
preg_match('/^\\\\/',$str)
答案 2 :(得分:0)
好的,奇怪的是,我刚从头开始再次运行我的测试,并且这次使用了4个反斜杠,正如我预期的那样。我最初的想法是单引号仍然使用第一个\来限定第二个。所以我尝试了四个,但必须在语法中搞砸其他东西。
if(preg_match('/^\\\\/', $str)) {}
以上作品。
答案 3 :(得分:-2)
我认为这可能与'
(单引号)
尝试将它们更改为双引号"
。两个\
就足够了。