正则表达式从电子邮件地址中的用户名中删除可变数量的句点?

Jef*_*man 2 regex replace mariadb

我正在论坛中清理垃圾邮件帐户,并找到了一堆具有以下格式的电子邮件地址:

n.fl.jersey.s@gmail.com
nfl.jerseys@gmail.com
n.flj.er.se.ys@gmail.com
Run Code Online (Sandbox Code Playgroud)

Gmail将这些视为同一个电子邮件帐户,而论坛软件将其视为不同的电子邮件地址,因此垃圾邮件发送者使用此技巧在创建垃圾论坛帐户时一次又一次地重复使用相同的电子邮件地址.

为了识别它们,我需要去除之前的所有时期@gmail.com.然后很容易识别所有重复的帐户.

幸运的是,MariaDB 10具有REGEXP_REPLACE针对这些类型的问题而设计的新功能.不幸的是,我无法弄清楚正确的正则表达式.

我的主要障碍是周期数变化很大,而且当项目数量随整个字符串随机变化时,我不确定如何编写正则表达式.我在其中一个电子邮件地址中找到了多达8个句点,完全随机,它们将显示在字符串中.

如果我可以剥离所有时期,但我不能,因为我需要@gmail.com保持不变,这很容易.此外,此正则表达式应仅匹配@ gmail.com地址并忽略其他电子邮件提供商.

我该怎么做呢?

Ara*_*Fey 7

gmail地址还有另外一个技巧:+忽略一个字符后的任何文本,例如foo@gmail.com并且foo+bar@gmail.com实际上是相同的地址.

您可以使用此模式删除+角色后的所有文本,以及所有点(无耻地基于Raj的模式,请不要讨厌我):

(?:\.|\+.*)(?=.*?@gmail\.com)
Run Code Online (Sandbox Code Playgroud)

(替换为空字符串)

regex101演示.


Avi*_*Raj 6

使用正向前瞻断言来匹配之前存在的所有点@gmail.com

\.(?=.*?@gmail\.com)
Run Code Online (Sandbox Code Playgroud)

然后用空字符串替换匹配的点.

DEMO