如何在PHP中匹配行首的反斜杠
在apache日志中出现一些错误后,我一直在试图找出“原因”。与preg_match命令相关的错误,在该命令中,我试图查找以反斜杠字符开头的字符串:如何在PHP中匹配行首的反斜杠,php,regex,preg-match,delimiter,backslash,Php,Regex,Preg Match,Delimiter,Backslash,在apache日志中出现一些错误后,我一直在试图找出“原因”。与preg_match命令相关的错误,在该命令中,我试图查找以反斜杠字符开头的字符串: preg_match('/^\\/',$str) 它正在报告“preg_match():未找到结尾分隔符“/” 出于好奇,我尝试了双引号而不是单引号,以及1到6个反斜杠的组合,它总是报告相同的错误。(我最终将测试切换到if(substr($str,0,1)=“\”{})而不是当前的测试)我认为这可能与'有关(单引号) 尝试将它们改为双引号。“。两
preg_match('/^\\/',$str)
它正在报告“preg_match():未找到结尾分隔符“/”
出于好奇,我尝试了双引号而不是单引号,以及1到6个反斜杠的组合,它总是报告相同的错误。(我最终将测试切换到if(substr($str,0,1)=“\”{})而不是当前的测试)我认为这可能与
'
有关(单引号)
尝试将它们改为双引号。“。两个
\
就足够了。我想这可能与”
(单引号)有关
尝试将它们更改为双引号
“
。两个\
就足够了。这是因为字符串文本中的\
被PHP转换为单个\
因此,您的正则表达式是/^\/
,其中\
将尾部斜杠逐字翻译为斜杠,而不是结尾分隔符。这使得正则表达式没有结尾分隔符,因此PCRE抱怨
您希望得到的结果是/^\\/
,要将其放入字符串文本中,需要将反斜杠加倍,因此:
preg_match('/^\\\\/',$str)
也就是说,
if($str[0]=='\\'')
更易于阅读,执行速度更快。这是因为字符串文本中的\
被PHP转换为单个\
因此,您的正则表达式是/^\/
,其中\
将尾部斜杠逐字翻译为斜杠,而不是结尾分隔符。这使得正则表达式没有结尾分隔符,因此PCRE抱怨
您希望得到的结果是/^\\/
,要将其放入字符串文本中,需要将反斜杠加倍,因此:
preg_match('/^\\\\/',$str)
也就是说,
if($str[0]=='\\'')
更易于阅读,执行速度更快。因为\\
将作为单个\
进行转义,您需要执行以下操作:
preg_match('/^\\\\/',$str)
因为
\\
将作为单个\
转义,所以您需要执行以下操作:
preg_match('/^\\\\/',$str)
好吧,奇怪的是,我只是从头开始重新运行了测试,这次我用了4个反斜杠,正如我所预料的那样。我最初的想法是单引号仍然使用第一个\来限定第二个。所以我试了四次,但一定是把语法搞砸了
if(preg_match('/^\\\\/', $str)) {}
上述方法有效。好吧,奇怪的是,我只是从头开始重新运行了测试,这次使用了我预期的4个反斜杠。我最初的想法是单引号仍然使用第一个\来限定第二个。所以我试了四次,但一定是把语法搞砸了
if(preg_match('/^\\\\/', $str)) {}
上述方法有效。为什么不
substr($str,0,1)=='\\'
或者甚至$str[0]=='\'
?@Gumbo:我必须三思===
才能意识到消除误报确实是必要的。你这样做是故意的还是一个好习惯?谢谢你的“心理矫正”!:-)@秋葵:……啊,结果证明它毕竟不是必需的。对于php,我认为'0'='\\'
是true
,因为第一个是数字。我需要停止使用那种语言@乔恩只是个习惯。如果我希望结果与比较它的值的数据类型相同,我将使用==
@Gumbo:Good habity。我做的还不够。为什么不substr($str,0,1)=='\\'
或者甚至$str[0]=='\'
?@Gumbo:我必须三思===
才能意识到消除误报确实是必要的。你这样做是故意的还是一个好习惯?谢谢你的“心理矫正”!:-)@秋葵:……啊,结果证明它毕竟不是必需的。对于php,我认为'0'='\\'
是true
,因为第一个是数字。我需要停止使用那种语言@乔恩只是个习惯。如果我希望结果与比较它的值的数据类型相同,我将使用==
@Gumbo:Good habity。我做得还不够。是的,我刚想出来-谢谢。我不知道我第一次尝试的时候做了什么,但不管怎样,我还是犯了同样的错误。在从头开始重建我的测试代码时,它可以正常工作。很好,然后选择此选项作为帮助他人的答案。是的,刚刚找到答案-谢谢。我不知道我第一次尝试的时候做了什么,但不管怎样,我还是犯了同样的错误。在从头开始重建我的测试代码时,它起作用了。很好,然后选择此选项作为帮助他人的答案。