Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_String_Escaping - Fatal编程技术网

Php 为什么这种未被替换的正则表达式模式有效?

Php 为什么这种未被替换的正则表达式模式有效?,php,regex,string,escaping,Php,Regex,String,Escaping,我读过很多文章,甚至有很多问题,在PHP中,哪种状态是,因为正则表达式是用字符串表示的,所以必须避开所有反斜杠。但出于某种原因,以下结果返回true而不会失败: preg_match('/^\w+\d+$/','abcdef123456') 如果我要逃离\s,它怎么会起作用?这似乎没有必要,但为什么每个人都不这么说呢 要指定文字单引号,请使用反斜杠(\)将其转义。到 指定文字反斜杠,将其加倍(\\)的所有其他实例 反斜杠将被视为文字反斜杠:这意味着 您可能使用的其他转义序列,例如\r或\n,将

我读过很多文章,甚至有很多问题,在PHP中,哪种状态是,因为正则表达式是用字符串表示的,所以必须避开所有反斜杠。但出于某种原因,以下结果返回true而不会失败:

preg_match('/^\w+\d+$/','abcdef123456')
如果我要逃离
\
s,它怎么会起作用?这似乎没有必要,但为什么每个人都不这么说呢

要指定文字单引号,请使用反斜杠(\)将其转义。到 指定文字反斜杠,将其加倍(\\)的所有其他实例 反斜杠将被视为文字反斜杠:这意味着 您可能使用的其他转义序列,例如\r或\n,将 按规定逐字输出,而不是有任何特殊含义


因为你用的是单引号。事实上,在这里使用双引号并不重要,因为
\w
在PHP字符串中没有特殊意义,因此被保留为
\w

所有的语言解析器都没有在双引号字符串中去掉转义符吗?不,至少PHP没有。反斜杠是文字,除非后面的字符有意义。