警告:preg_match()[function.preg-match]:未知修饰符'_'

时间:2013-11-30 21:21:10

标签: php regex preg-match eregi

以下是我正在尝试使用的正则表达式

$eregicheck = "^([-!#\$%&'*+./0-9=?A-Z^_`a-z{|}~])+@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~]+\\.)+[a-zA-Z]{2,4}\$";

我更改了以下行

return eregi($eregicheck, $emailtocheck);

return preg_match($eregicheck, $emailtocheck);

但我不知道为什么我会收到错误

Warning: preg_match() [function.preg-match]: Unknown modifier '_'

2 个答案:

答案 0 :(得分:2)

尝试:

^([-!#\$%&'*+./0-9=?A-Z\^_`a-z{|}~])+@([-!#\$%&'*+/0-9=?A-Z\^_`a-z{|}~]+\\.)+[a-zA-Z]{2,4}\$

你需要逃避^。它是一个特殊字符,它向RE提供指令。

答案 1 :(得分:2)

您收到此错误是因为php要求在正则表达式模式之前和之后使用分隔符,在您的情况下,它假定为^,并且在分隔符之后遵循修饰符,在您的情况下_。因为没有这样的修饰符因此错误。将代码更改为:

$eregicheck = "/^([-!#\$%&'*+.\/0-9=?A-Z^_`a-z{|}~])+@([-!#\$%&'*+\/0-9=?A-Z^_`a-z{|}~]+\\.)+[a-zA-Z]{2,4}\$/";

P.S。:这看起来像一个复杂的正则表达式,你确定它不能简化吗? :P