0

我对常规表达式不是很了解,所以我不明白为什么会出现这个错误。

我正在使用以下代码来匹配字符串中的所有电子邮件$str并将它们保存在数组中$match

preg_match_all(
    "/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/",
    $str,
    $match
);

显然,正则表达式(我从这里得到)中存在问题,因为我收到了这个错误:

警告:preg_match_all() [function.preg-match-all]: Unknown modifier '=' in C:\xampp\htdocs\project\Framework\Sanitizer.class.php 第 38 行

有人可以告诉我有什么问题吗?

谢谢

4

2 回答 2

4

您必须在等号之前转义正斜杠,例如:

preg_match_all(
    "/^[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/",
    $str,
    $match
);

“/”是整个表达式的分隔符,因此必须在正则表达式本身中进行转义

于 2012-04-05T19:45:41.420 回答
1

您需要使用反斜杠转义该字符串中的许多字符。您想逃避的一些是: /?^{|} 。

我会这样写:

preg_match_all(
    "/^[a-zA-Z0-9.!#$%&’*+\/=\?\^_`\{\|\}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/",
    $str,
    $match
);

我发现这个网站在匹配电子邮件地址方面非常有用:

http://www.regular-expressions.info/email.html

于 2012-04-05T19:45:31.240 回答