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