Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中匹配行首的反斜杠_Php_Regex_Preg Match_Delimiter_Backslash - Fatal编程技术网

如何在PHP中匹配行首的反斜杠

如何在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)=“\”{})而不是当前的测试)我认为这可能与'有关(单引号) 尝试将它们改为双引号。“。两

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

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。我做得还不够。是的,我刚想出来-谢谢。我不知道我第一次尝试的时候做了什么,但不管怎样,我还是犯了同样的错误。在从头开始重建我的测试代码时,它可以正常工作。很好,然后选择此选项作为帮助他人的答案。是的,刚刚找到答案-谢谢。我不知道我第一次尝试的时候做了什么,但不管怎样,我还是犯了同样的错误。在从头开始重建我的测试代码时,它起作用了。很好,然后选择此选项作为帮助他人的答案。