解析电子邮件ID的文本

时间:2010-09-23 08:41:56

标签: php regex email preg-match

我正在尝试使用php / regex解析电子邮件ID的文本。是否有任何类或内置方法来执行此操作? 该文本包含随机位置的多个电子邮件ID。

文本的来源是.doc文件,然后我将其粘贴到表单中,以便在提交时进行处理。

preg_match('/^[^@]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email) //from php.net

我在superuser上就问题的软件解决方案提交了类似的问题。

1 个答案:

答案 0 :(得分:3)

很难准确检测运行文本中嵌入的电子邮件。您将错误地匹配不是电子邮件地址的内容,或者错过一些有效但奇怪的电子邮件地址。

一个很好的起点是

preg_match_all('/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/i', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
    # Matched text = $result[0][$i];
}

(由RegexBuddy从其库中生成)

它会匹配大多数“普通”地址,但不会找到mail@1.2.3.4"Tim\ O'Reilly"@microsoft.com之类的地址。当然它会像my@mail.addr那样与废话相匹配。