Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MySQL从字符串中隔离电子邮件地址_Mysql_String - Fatal编程技术网

使用MySQL从字符串中隔离电子邮件地址

使用MySQL从字符串中隔离电子邮件地址,mysql,string,Mysql,String,我试图从一块自由域文本(列名为text)中分离电子邮件地址 自由文本字段中的前后字符有许多不同的变体,即: email me! john@smith.com e:john@smith.com m:555-555-5555 john@smith.com--personal email 我尝试了INSTR()和SUBSTRING_INDEX()的变体,首先隔离“@”(可能是查找电子邮件时的一个可靠常数…)并提取左侧的字符(直到出现空格或非限定字符,如“-”或:“)并对@后面的文本执行相同的操作 然

我试图从一块自由域文本(列名为text)中分离电子邮件地址

自由文本字段中的前后字符有许多不同的变体,即:

email me! john@smith.com
e:john@smith.com m:555-555-5555
john@smith.com--personal email
我尝试了
INSTR()
SUBSTRING_INDEX()
的变体,首先隔离
“@”
(可能是查找电子邮件时的一个可靠常数…)并提取左侧的字符(直到出现空格或非限定字符,如
“-”
:“
)并对
@
后面的文本执行相同的操作

然而,到目前为止,我所尝试的一切都没有将噪音过滤到我需要的程度


显然,100%的准确率是不可能的,但有人介意试一试我如何构造select语句吗

在MySQL中没有简单的解决方案。但是,在使用正则表达式检索后,您可以轻松地执行此操作

下面是一个如何在您的案例中使用它的示例:

如果希望它从一个字符串中选择所有电子邮件地址:

您可以使用正则表达式提取MySQL中确实包含电子邮件的组,但它仍然无法从字符串中提取组。这必须在MySQL之外完成

SELECT * FROM table
WHERE column RLIKE '\w*@\w*.\w*'
RLIKE
仅用于匹配它,您可以在
SELECT
中使用
REGEXP
,但它仅返回1或0,无论是否找到匹配项:s


如果你真的想在MySQL中提取它,也许这另一个可以帮助你。但这似乎需要做大量的工作,而不是在MySQL之外进行

现在在MySQL 5和8中,您可以使用REGEXP_SUBSTR将电子邮件从一块自由文本中分离出来

SELECT * FROM table
WHERE column RLIKE '\w*@\w*.\w*'
SELECT *, REGEXP_SUBSTR(`TEXT`, '([a-zA-Z0-9._%+\-]+)@([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,4})') AS Emails FROM `mytable`;
如果您只想通过电子邮件获取记录并删除重复项

SELECT DISTINCT REGEXP_SUBSTR(`TEXT`, '([a-zA-Z0-9._%+\-]+)@([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,4})') AS Emails FROM `mytable` WHERE `TEXT` REGEXP '([a-zA-Z0-9._%+\-]+)@([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,4})';

电子邮件的正则表达式验证本身就是一场噩梦@ElzoValugi当然,我做了一个非常基本的正则表达式,因为电子邮件可能也包含数字和某些字符。托马斯在他的问题中说,他的目标不是100%准确。最好是从一开始就确保输入的内容是干净的,而不是试图从随机文本中提取电子邮件地址,因为这样做肯定不可能在所有的文本中都获得100%的准确率