PHP - preg_match_all - 允许空格和双@的松散电子邮件匹配模式

时间:2012-01-18 03:42:20

标签: php email preg-match-all

我正在查看我们的旧网站文件和数据,其中包含我们的会员电子邮件和通信10年。

我正在提取所有电子邮件地址(以及拙劣的电子邮件条目)并将它们添加到我们的新网站db。

这是初学者尝试cms并且没有错误检查和验证。

所以,我在使用空格匹配电子邮件时遇到了麻烦,并且@ @。

jam @ spa ces1.com

jam @ spac es2.com

果酱@@ doubleats.org

我构建了这个松散的正则表达式,故意允许一大堆不正确的电子邮件格式,但上面三个是我无法弄清楚的例子。

这是我目前的“工作”代码:

$pattern1= '([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)';
$pattern2='\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b';
$pattern="/$pattern1|$pattern2/i";
$isago = preg_match_all($pattern,$text,$matches);
    if ($isago) {.......

我需要另一种模式,允许上面的三个电子邮件示例被识别为电子邮件地址。 (实际验证将在稍后进行)

此外,是否还有其他可以使用的模式可以让我识别文件中可能存在的电子邮件?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

对于第三种情况,您可以将@更改为@{1,2}。 对于第一个和第二个,您可以在正则表达式pattern1中添加空格:

$pattern1= '([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@{1,2}([ ]+|)([ a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)';
$pattern2='\b[A-Z0-9._%+-]+@{1,2}[A-Z0-9.-]+\.[A-Z]{2,4}\b';

答案 1 :(得分:0)

这个答案就像我知道的一个笑话......但是,这个RegEx怎么样:

/[\S ]+@[\S ]+\.[\S ]+/i

这对你有用吗?我在一份文件中对它进行了测试并匹配了三封邮件。

答案 2 :(得分:0)

出于一般目的,你应该使用这样的东西:

/[A-Za-z0-9\._]+@[A-Za-z0-9\._]+\.[A-Za-z0-9\._]+/i

通过它,您可以匹配所有电子邮件,甚至用换行符或逗号分隔。