如何在PHP正则表达式类中使用方括号?
我想在已接受所有数字、下划线、句点和字母数字字符的验证正则表达式中添加[and] 下面是正在运行的正则表达式: $regex=^[._a-zA-Z0-9-]*$ 但当我尝试时:如何在PHP正则表达式类中使用方括号?,php,regex,Php,Regex,我想在已接受所有数字、下划线、句点和字母数字字符的验证正则表达式中添加[and] 下面是正在运行的正则表达式: $regex=^[._a-zA-Z0-9-]*$ 但当我尝试时: $regex = "^[.\\[\\]_a-zA-Z0-9-]*$"; 或 它不工作,我读了PHP中的双转义括号,但它不工作 我用艾瑞吉 有什么想法吗 测试: <?php //$regex = "^[_a-zA-Z0-9-]*$"; $regex = "^[.\\[\\]_a-zA-Z0-9-]*$"; echo
$regex = "^[.\\[\\]_a-zA-Z0-9-]*$";
或
它不工作,我读了PHP中的双转义括号,但它不工作
我用艾瑞吉
有什么想法吗
测试:
<?php
//$regex = "^[_a-zA-Z0-9-]*$";
$regex = "^[.\\[\\]_a-zA-Z0-9-]*$";
echo("1".(eregi($regex, "patrick")?"True":"False"));//Should return True
echo("<br>");
echo("2".(eregi($regex, "p@trick")?"True":"False"));
echo("<br>");
echo("3".(eregi($regex, "pat rick")?"True":"False"));
echo("<br>");
echo("4".(eregi($regex, "patr'ick")?"True":"False"));
echo("<br>");
echo("5".(eregi($regex, "pAtr'ick")?"True":"False"));
echo("<br>");
echo("6".(eregi($regex, "pAtr_ick")?"True":"False"));//Should return True
echo("<br>");
echo("7".(eregi($regex, "pA-tr_ick")?"True":"False"));//Should return True
echo("<br>");
echo("8".(eregi($regex, "pAaAta atrack")?"True":"False"));
echo("<br>");
echo("9".(eregi($regex, "pA%k")?"True":"False"));
echo("<br>");
echo("10".(eregi($regex, "patrick.second")?"True":"False")); //Should return True
echo("<br>");
echo("11".(eregi($regex, "[Pat]Rick")?"True":"False"));//Should return True
echo("<br>");
?>
如果在双引号内,则需要转义$
例如:
如果在双引号内,则需要转义$
例如:
前者应该有效。您需要使用两个反斜杠:一个用于正则表达式转义,另一个用于字符串转义。看看它是如何被评估的:
echo "^[.\\[\\]_a-zA-Z0-9-]*$"; // => ^[.\[\]_a-zA-Z0-9-]*$
这正是你需要的
改为编辑使用:
我不知道为什么这个正则表达式不适用于eregi,但它适用于preg_match。此外,这些已弃用,将由PHP6删除,以支持。请注意,PCRE正则表达式用于将正则表达式括起来,并将其与。前者应起作用。您需要使用两个反斜杠:一个用于正则表达式转义,另一个用于字符串转义。看看它是如何被评估的:
echo "^[.\\[\\]_a-zA-Z0-9-]*$"; // => ^[.\[\]_a-zA-Z0-9-]*$
这正是你需要的
改为编辑使用:
我不知道为什么这个正则表达式不适用于eregi,但它适用于preg_match。此外,这些已弃用,将由PHP6删除,以支持。请注意,PCRE正则表达式用于将正则表达式括起来并将其与分隔开来。这不是一个很好的答案,但有一个有用的提示:如果正则表达式不需要php解析,请在其周围使用单引号,这样就不必进行额外的转义。只有单引号需要在单引号字符串中转义
此外,ereg函数族是。为什么不使用preg_match,在结束斜杠后加上一个“i”来表示不区分大小写的匹配?这不是一个很好的答案,但有一个有用的提示:如果正则表达式不需要php解析,请在其周围使用单引号,这样就不必进行额外的转义。只有单引号需要在单引号字符串中转义
此外,ereg函数族是。为什么不使用preg_match,在结束斜杠后加一个“i”来表示不区分大小写的匹配?使用ereg函数时,括号表达式中的字符不能转义。请改用此模式:
$regex = "^[]._[a-zA-Z0-9-]*$";
通过阅读中括号上的零件表达式,您可以理解其工作原理
无论如何,最好改为切换到,因为在PHP5.3中,eregi现在已被弃用。在使用ereg函数时,不能对括号表达式中的字符进行转义。请改用此模式:
$regex = "^[]._[a-zA-Z0-9-]*$";
通过阅读中括号上的零件表达式,您可以理解其工作原理
无论如何,最好还是直接切换到,因为在PHP5.3中,eregi现在已被弃用。在括号内转义不适用于它将\视为文字字符的ereg。 “]”应始终作为括号中的第一个字符放置,“[”可以位于其他任何位置:
$regex = "^[]._[a-zA-Z0-9-]*$";
但是,您最好迁移到preg_match,因为ereg在PHP5.3中不受欢迎,将在PHP6中删除。在括号内转义不适用于ereg,它将\视为文字字符。 “]”应始终作为括号中的第一个字符放置,“[”可以位于其他任何位置:
$regex = "^[]._[a-zA-Z0-9-]*$";
但是,您最好迁移到preg_match,因为ereg在PHP5.3中不受欢迎,将在PHP6中被删除。与问题中发布的代码不兼容,我只是用一个代码段编辑了它,它与preg_match一起工作:$regex=/^[].\u a-zA-Z0-9-]*$/;不适用于问题中发布的代码,我只是用一个代码段对其进行了编辑,它适用于preg_match with:$regex=/^[[]。_a-zA-Z0-9-]*$/;不适用于问题中发布的代码我只是用一个代码段编辑了它你是对的-似乎PHP足够聪明,可以理解缺少的反斜杠。尝试改用preg_match。ereg不推荐使用。不适用于问题中发布的代码我只是用一个代码段编辑了它你是对的-似乎PHP足够聪明,可以取消删除缺少的反斜杠。尝试改用preg_match。不推荐使用ereg。不要使用eregi,因为它将从PHP核心中删除。不要使用eregi,因为它将从PHP核心中删除。