使用RegEx时获取未知修饰符错误

时间:2012-04-05 19:40:13

标签: php regex preg-match preg-match-all

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

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

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

显然在正则表达式中存在问题(我从here获得)因为我收到此错误:

  

警告:preg_match_all()[function.preg-match-all]:未知修饰符   '='在C:\ xampp \ htdocs \ project \ Framework \ Sanitizer.class.php上   第38行

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

由于

2 个答案:

答案 0 :(得分:4)

你必须在等号之前逃避正斜杠,例如:

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

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

答案 1 :(得分: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