【问题标题】:"Unknown modifier 'g' in..." when using preg_match in PHP?在 PHP 中使用 preg_match 时出现“未知修饰符 'g' in ...”?
【发布时间】:2011-04-04 11:13:50
【问题描述】:

这是我正在尝试使用的正则表达式:

/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim

我在this site 上找到了它,当我在那里试用时效果很好。但只要我把它放在我的代码中,我就会收到这条消息:

Warning: preg_match() [function.preg-match]: Unknown modifier 'g' in C:\xampp\htdocs\swebook\includes\classes.php on line 22

谁能解释什么是错的,为什么它在那个网站上运行,而不是在我的代码中?

【问题讨论】:

  • 如果我们确切地知道您要使用正则表达式做什么,我们可以为您提供更好的帮助。而且您需要 更好的帮助——无论如何,正则表达式确实需要。在该网站上所有写得不好的电子邮件正则表达式中,您很可能选择了最糟糕的一个。 ://
  • 仅供参考,您的正则表达式将验证这些类型的邮件:“-.-.-.--.@--some--domain--.com”并且这些类型的有效邮件将不验证:“info@subdomain.domain.com”。最后但并非最不重要的一点是 \w 非常危险,因为 PHP preg 使用 Perl 兼容的正则表达式,而不是像 Javascript 那样的 POSIX。如果 PHP 在非美国/英国本地化的服务器上运行,\w 将匹配重音字母,因此您将匹配 "àèìòù@domain.com" 具有有效邮件。阅读此处了解更多详情:it.php.net/manual/en/function.preg-replace.php#92443

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


【解决方案1】:

preg_match 没有修饰符 g。相反,您必须使用preg_match_all 函数。

所以而不是:

preg_match("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim", ....)

使用:

preg_match_all("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/im", ....)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多