【问题标题】:PHP parser of e-mail addresses电子邮件地址的 PHP 解析器
【发布时间】:2011-05-14 10:13:34
【问题描述】:

女士们,先生们,美好的一天。我是编程新手,我的问题是为电子邮件地址创建一个 php 解析器。我需要解析整个网站并创建一个带有电子邮件的 .txt 文件。 所以,这就是问题所在。我必须使用什么?它应该是带有任何参数的正确 php 函数 *file_get_contents* 还是来自 PEAR 项目的 PHPparser_Generator? 有任何想法吗? P.S.:我想提醒你不要自己写代码,因为我想自己做。只是任何提示。

非常感谢。最好的问候,Aen

【问题讨论】:

  • 现在,您为什么要从网站上获取电子邮件地址?例如,如果您控制了网站,则可以在用户个人资料中访问电子邮件地址。对我来说听起来很垃圾。
  • 闻起来像脚本小子项目

标签: php parsing pear email


【解决方案1】:

是的,file_get_contents 会这样做。将其分配给一个变量,然后使用 preg_match_all 找到这个表达式:/[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/i。这是一个匹配电子邮件地址的正则表达式。

【讨论】:

  • 非常小的评论 - 加号在电子邮件地址的用户部分也有效,并且已通过在 GMail 和其他一些电子邮件提供商中的使用而得到普及,作为允许用户使用的标志有多个“虚拟”电子邮件地址 - 即 user+flag1@server.com 和 user+flag2@server.com 将通过相同的地址。
  • 解析邮件地址不可掉以轻心:linuxjournal.com/article/9585
  • 正如卢卡诺斯指出的那样,应该包括 + 以及其他符号。看看regular-expressions.info/email.html,看看实际的 RFC 2822 实现很有趣
  • 我使用的正则表达式将匹配绝大多数可用的电子邮件地址。如果您愿意,可以在第一组方括号中添加一个加号。至于 linuxjournal 文章中提到的其他人......有多少百分比的电子邮件采用这样的形式?我认为 0.0001% 将是一个相当不错的上限。
  • 这是一个匹配电子邮件地址的正则表达式。不,不是 - 邮箱和域验证都是错误的(例如 make$$buy#@somwhere.example.museum)并且它被限制为仅匹配 ADDR-SPEC(不是电子邮件地址)并且 OP 似乎正在尝试提取地址(即为什么开始/结束锚点)
【解决方案2】:

在我的脑海中,像.....

preg_match_all("/([a-z0-9\._%+!$&*=^|~#%\'`?{}/\-]+@[a-z0-9\.-]+\.[a-z]{2,6})/i",
   file_get_contents($somefile), $matches, PREG_PATTERN_ORDER);
foreach ($matches[0] as $addrspec) {
   mail($addrspec, "hello", $msg);
}

【讨论】:

  • 电子邮件地址的第一部分在技术上也可以包含@ :) 你批评我只匹配 ADDR-SPEC 所以我希望看到它修改为匹配整个电子邮件地址(现在有挑战!!!)。但是,为包含整个代码 +1。
猜你喜欢
  • 2011-11-27
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2011-12-08
  • 2019-09-10
  • 1970-01-01
相关资源
最近更新 更多