我有一个包含大量电子邮件地址的数据库。
由于脚本中存在错误,数据库中的电子邮件地址错误。这些地址有一个已知的模式。
它们由真正的电子邮件地址组成,在开头与字符串连接。 此字符串本身就是电子邮件地址的一部分。
示例:
正确的电子邮件应该是:
john.doe@example.com
相反,我有:
doejohn.doe@example.com
或者:
johndoejohn.doe@example.com
如何识别这些地址?
我考虑创建一个在字符串中找到重复文本的正则表达式,但我可以找到如何做到这一点。
有什么想法吗?
答案 0 :(得分:2)
您可以使用以下查询来处理LASTNAMEfirstname.lastname@something.com
模式,这将首先找到last_name,然后在第一个.
之前的第一部分中将其替换为null。
concat(replace(substr(email,1,locate('.',email)),substr(email,LOCATE('.',email)+1,locate('@',email)-LOCATE('.',email)-1),'')
,
substr(email,locate('.',email)+1,length(email))
)
请参阅此处的SQL小提琴示例
http://sqlfiddle.com/#!9/24fba/2
但这不会照顾FIRSTNAMElastnameFIRSTNAME.lastname@example.com
模式。
答案 1 :(得分:1)
现在无法测试,但这可能会有效:
^([^@]{5,})[^@]{1,}\.\1@[^@]+$