如何使用 REGEXP MySQL 函数查找超过 2 个点的电子邮件?

Posted

技术标签:

【中文标题】如何使用 REGEXP MySQL 函数查找超过 2 个点的电子邮件?【英文标题】:How to find email with more than 2 dots using REGEXP MySQL function? 【发布时间】:2012-04-03 12:15:41 【问题描述】:

我有一个包含大量垃圾邮件帐户的大型用户数据库,例如 j.o.hnha.r.rold.t.ho.mp.so.n.j.u.n.io.r@gmail.como.f.vst.p.rqlsy.j@gmail.com,我想通过一次查询将它们删除(而不是执行解析所有数据库的 php 脚本)。

我看到 mysql 有一个 REGEXP 函数,但很难将它与“点”一起使用。我尝试了很多类似的东西:

SELECT * FROM users WHERE email REGEXP '([[...]])2,' SELECT * FROM users WHERE email REGEXP '(\\.)2,' SELECT * FROM users WHERE email REGEXP '(.*)[[...]]2(.*)'

每一个都失败了。

有什么想法吗?

【问题讨论】:

2 个点?例如 joe.bloggs@example.co.uk 呢? (这个论点可以永远持续下去)。你为什么关心他们是否是垃圾邮件? f.o.o.b.a.r@gmail.com 转到与foobar@gmail.com 相同的帐户。 @Ben 我只想清理我的数据库。 @j0k 你怎么知道他们是垃圾邮件?当我希望能够预先过滤收到的邮件时,我经常在我的 gmail 地址中添加额外的点。 Gmail 在投递电子邮件时会去除电子邮件中的所有点。 【参考方案1】:

这个怎么样?

SELECT * FROM users WHERE email REGEXP '[.].*[.].*@';

这会在 @ 之前搜索两个(或更多)点(这仍然允许多点域名,如 .co.uk 等)。

但是,您应该考虑到某些用户的用户名中可能真的有多个点的可能性,这仍然是合法的。

【讨论】:

谢谢,我不会进行大规模的delete from【参考方案2】:

据我所知,这通常只是使用 gmail.com 帐户时的垃圾邮件问题。大多数带有多个点的合法用户名将类似于 jason.b.williams@gmail.com - 所以在其用户名中使用 3 个或更多点的垃圾邮件发送者 - 我将从我的数据库中删除,并且我将在注册过程中实施代码当使用 gmail 地址时,不允许在用户名中使用超过 2 个点。

SELECT user_email FROM users WHERE email REGEXP '[.].*[.].*[.].*@';

【讨论】:

为什么?请不要。 gmail 地址中的点数没有任何意义。我讨厌网站不允许我在我的 gmail 地址中添加“+”号,如果有任意规则阻止我在我的地址中添加额外的点,我会更讨厌它。跨度>

以上是关于如何使用 REGEXP MySQL 函数查找超过 2 个点的电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中REGEXP正则表达式使用大全

MySQL中REGEXP正则表达式使用大全

MySQL之正则表达式(REGEXP)

go语言中regexp包中的函数和方法

mysql模糊查询 like/REGEXP

针对 REGEXP 的 Mysql 优化