2013-03-25 268 views
0

我使用这个代码从字符串中解析出电子邮件:电子邮件正则表达式失败对某些电子邮件地址

function get_emails ($str) { 
    $pattern = '/([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' . 
    '(([a-z0-9-])*([a-z0-9]))+' . '(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)/i'; 

    preg_match ($pattern, $str, $matches); 

    return $matches; 
} 

它运作良好,除非地址在域超过一个周期。所以[email protected]工作正常,但[email protected] GET剪辑在[email protected]

我能更改为解决这一问题?

谢谢!

+0

如果您的电子邮件正则表达式长度小于几千个字符,则不正确。 – hobbs 2013-03-25 18:03:46

+0

我的地方发现这个堆栈溢出。它与多个句:'([A-Z0-9 ._% - ] + @ [A-Z0-9 .-] + \ [AZ] {2,4})' – 2013-03-25 18:05:27

+0

您还假定名称和域是英语! a-z可怜的老蕾妮会心烦意乱http://en.wikipedia.org/wiki/Internationalized_domain_name – Waygood 2013-03-25 18:06:16

回答

0

你可以添加一个+结束前,即+/i