【问题标题】:Regular Expressions on PHP remove url from an email stringPHP 上的正则表达式从电子邮件字符串中删除 url
【发布时间】:2012-12-27 10:18:10
【问题描述】:

我正在上传从 Excel 导出的制表符分隔的文本文件,基本上我通过使用 preg_match_all 获取文档上的所有电子邮件字段

preg_match_all("/([\s]*)[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i",$string,$emails);

在某些情况下,电子邮件会附加一个 URL,如下所示:prefix.user@domain.comwww.domain.com

我只需要去掉电子邮件地址之后的 url 的电子邮件

如何使用正则表达式完成这项工作?

【问题讨论】:

  • 不太好...你可以让你的数据供应商来修复文件吗?从长远来看,它会为您节省很多麻烦。
  • 数据来自一个有 8 年历史的 excel 联系人目录,有大约 200 个文件:S
  • 好吧,抛开可争论的模式不谈,它的一部分@[\._a-zA-Z0-9-]+ 不可能捕获@domain.comwww.domain.com,除非它按原样出现在输入中。 domain.comwww.domain.com 是 .com 区域的合法域名。您所有的“错误”捕获是否都看起来像“没有 www-followed-by-domain-with-www”的域?
  • 不,大约有 15% 的输入带有附加的 url,我已经对 10 个不同的文件进行了一些测试,并且所有文件中都存在这种异常情况,我注意到每个网址以 www 开头。但是...不知道是否也有一些带有http或https的...我相信有
  • 我正在考虑将正则表达式结果分解为 2 个字符串,一个是实际的电子邮件,另一个是垃圾邮件

标签: php regex preg-replace preg-match-all


【解决方案1】:

像这样列出最后一个正则表达式组中所有可能的域名,默认情况下包括顶级域。

[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)

您可以阅读更多关于电子邮件验证here 或阅读相关问题here

更新

符合RFC 2822标准的表达式

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)

【讨论】:

  • 可能不是,a@co 是一个有效的电子邮件地址,a@b.com.au 之类的东西也会出错...
  • 我尝试了你更新的正则表达式并给我一个未知修饰符'+'
  • @IvanBravoCarlos,奇怪,bec。我已经检查过myregexp.com 并且效果很好。还尝试了regexpal.com 并且还可以。你确定,你做的一切都是对的吗?
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 2017-08-24
  • 2011-07-01
  • 1970-01-01
  • 2012-03-21
  • 2011-08-20
  • 2020-06-04
  • 2013-04-09
相关资源
最近更新 更多