PHP - 如何从包含杂项数据行的输入中识别电子邮件地址

问题描述 投票:0回答:1

提前为另一个电子邮件模式匹配查询道歉。 这是我到目前为止所拥有的:

$text = strtolower($intext);
$lines = preg_split("/[\s]*[\n][\s]*/", $text);
$pattern = '/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/';
$pattern1= '/^[^@]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$/';
foreach ($lines as $email) {
preg_match($pattern,$email,$goodies);
$goodies[0]=filter_var($goodies[0], FILTER_SANITIZE_EMAIL);
if(filter_var($goodies[0], FILTER_VALIDATE_EMAIL)){
array_push($good,$goodies[0]);
}
}

$Pattern 工作正常,但 .rr.com 地址(我确信还有更多问题)被剥夺了 .com

$pattern1 仅抓取单独一行的电子邮件。

我正在将一整页的杂项文本粘贴到文本区域中,其中包含我试图恢复的旧数据文件中的一些电子邮件。

除了带有多个“.”的电子邮件之外,一切都运行良好。在“@”之前或之后。

我确信肯定还有更多问题。

我尝试了几种我发现的模式以及一些我尝试编写的模式。

在我拔掉剩余的头发之前,有人可以给我看看这里的光吗?

php email text-extraction
1个回答
0
投票

这个怎么样?

/((?:\w+[.]*)*(?:\+[^@ \t]*)?@(?:\w+[.])+\w+)/

说明:

(?:\w+[.])*
识别 0 个或多个单词字符串(字母数字 + _)实例,可选地用句点字符串分隔。 接下来,
(?:\+[^@ \t]*)?
识别一个加号,后跟零个或多个非空白、非 at 符号字符。 然后是 @ 符号,最后是
(?:\w+[.])+\w+
,它匹配由句点分隔并以单词字符串结尾的单词字符串序列。 (即,[子域.]域.顶级域)

© www.soinside.com 2019 - 2024. All rights reserved.