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

如何在PHP正则表达式类中使用方括号?

如何在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

我想在已接受所有数字、下划线、句点和字母数字字符的验证正则表达式中添加[and]

下面是正在运行的正则表达式: $regex=^[._a-zA-Z0-9-]*$

但当我尝试时:

$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核心中删除。