&引用;未知修饰符';g';在……中”;在PHP中使用preg_match时?

&引用;未知修饰符';g';在……中”;在PHP中使用preg_match时?,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,这是我尝试使用的正则表达式: /^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim 我发现它是开着的,当我在那里试用的时候,效果非常好。但一旦我将其放入代码中,我就会收到以下消息: Warning: preg_match() [function.preg-match]: Unknown modifier 'g' in C:\xampp\htdocs\swebook\includes\classes.php on line 22 有谁能解释一下哪里

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

/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim
我发现它是开着的,当我在那里试用的时候,效果非常好。但一旦我将其放入代码中,我就会收到以下消息:

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

有谁能解释一下哪里出了问题,以及为什么它在那个网站上运行,而不是在我的代码中运行?

没有修改器
g
。相反,您必须使用该函数

因此,不是:

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


如果我们知道你想用正则表达式做什么,我们可以给你更好的帮助。你需要更好的帮助,或者正则表达式需要。在该网站上所有写得很差的电子邮件正则表达式中,您很可能选择了最差的一个:/仅供参考,您的regexp将验证这些类型的邮件:“-.-.@--some--domain--.com”,并且这些类型的有效邮件将不会验证:info@subdomain.domain.com". 最后但并非最不重要的\w是非常危险的,因为PHP preg使用与Perl兼容的正则表达式,而不是类似于POSIX的Javascript。如果PHP在非美国/英国本地化的服务器上运行,\w还将匹配重音字母,因此您将匹配“èèòù@domain.com”具有有效邮件。请阅读此处了解更多详细信息:
preg_match_all("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/im", ....)