Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 如何防止[a-z]类型的正则表达式与控制字符匹配_Php_Regex - Fatal编程技术网

Php 如何防止[a-z]类型的正则表达式与控制字符匹配

Php 如何防止[a-z]类型的正则表达式与控制字符匹配,php,regex,Php,Regex,最近我一直在php中使用[a-z]类范围regexp。我不知道为什么,但它不仅匹配a到z字符,还匹配控制字符。 例如: 返回1。(我使用的是PHP5.6)。 我想防止控件字符匹配。我已经用[:^cntrl:]做了一些测试,但没有多少成功。 谁能帮帮我吗。 提前感谢。锚定可以在字符串末尾匹配,也可以在字符串的最后换行之前匹配 仅内部使用/DPCRE\u美元修饰符: preg_match("#^[a-z]{0,3}$#D", "aa\n") ^ 或

最近我一直在php中使用[a-z]类范围regexp。我不知道为什么,但它不仅匹配a到z字符,还匹配控制字符。 例如:

返回1。(我使用的是PHP5.6)。 我想防止控件字符匹配。我已经用[:^cntrl:]做了一些测试,但没有多少成功。 谁能帮帮我吗。
提前感谢。

锚定可以在字符串末尾匹配,也可以在字符串的最后换行之前匹配

仅内部使用
/D
PCRE\u美元
修饰符:

preg_match("#^[a-z]{0,3}$#D", "aa\n")
                         ^
\z
在字符串最末端匹配的锚点:

preg_match("#^[a-z]{0,3}\z#", "aa\n")
:


这是因为
\n
是与
$
@ClasG匹配的行尾:
$
是一个零宽度的锚点,因此它不匹配
\n
字符本身,而是匹配
\n
前面的位置-行尾,正如您所说的那样。@TimPietzcker True。然而,正是
\n
的存在“导致”了匹配。这就是我的意思。
preg_match("#^[a-z]{0,3}\z#", "aa\n")
echo preg_match("#^[a-z]{0,3}$#", "aa\n");  // => 1
echo preg_match("#^[a-z]{0,3}$#D", "aa\n"); // => 0
echo preg_match("#^[a-z]{0,3}\z#", "aa\n"); // => 0