Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_Regex - Fatal编程技术网

通过正则表达式在MySQL中解析结果

通过正则表达式在MySQL中解析结果,mysql,regex,Mysql,Regex,我对MySQL的正则表达式支持的功能有点困惑,我还没有找到一个在sql语句中如何使用正则表达式分离结果的可靠示例 例如: 我怎么能从一个看起来像 +-------------------------+ |Emails | |-------------------------| |Some.email@yourDomain.com| +-------------------------+ 并通过一个sql语句返回如下内容 +------------------

我对MySQL的正则表达式支持的功能有点困惑,我还没有找到一个在sql语句中如何使用正则表达式分离结果的可靠示例

例如:

我怎么能从一个看起来像

+-------------------------+
|Emails                   |
|-------------------------|
|Some.email@yourDomain.com|
+-------------------------+
并通过一个sql语句返回如下内容

+------------------------------+
|Username   |  Domain    | TLD |
|-----------|------------|-----|
|some.email | yourdomain | com |
+------------------------------+

MySQL没有内置的功能来满足您的要求。通过定义一些新函数是可能的,但是用任何编程语言访问数据库都可能更容易

但是,对于像电子邮件地址这样简单的内容,您根本不需要使用正则表达式,您可以使用,如下所示:

换句话说,就是:

用户名=第一个“@”之前的所有内容 域=第一个“@”和第一个“.”之间的所有内容 TLD=最后一个“.”之后的所有内容
MySQL没有内置的功能来满足您的要求。通过定义一些新函数是可能的,但是用任何编程语言访问数据库都可能更容易

但是,对于像电子邮件地址这样简单的内容,您根本不需要使用正则表达式,您可以使用,如下所示:

换句话说,就是:

用户名=第一个“@”之前的所有内容 域=第一个“@”和第一个“.”之间的所有内容 TLD=最后一个“.”之后的所有内容 你也可以试试

select substring_index(email, '@', 1) username
       ,substring_index(substring_index(email, '@', -1), '.',1) domain
       ,substring_index(email, '.', -1) tld
from 
( select 'Some.email@yourDomain.com' email ) E
仅使用子字符串_索引。第一个子串将所有内容索引到“@”的左侧,第三个内部子串将所有内容索引到“@”的右侧,然后第二个子串对其进行解析以获取域,最后一个子串将所有内容拉到“.”的右侧。

您也可以尝试

select substring_index(email, '@', 1) username
       ,substring_index(substring_index(email, '@', -1), '.',1) domain
       ,substring_index(email, '.', -1) tld
from 
( select 'Some.email@yourDomain.com' email ) E
仅使用子字符串_索引。第一个子字符串将所有内容索引到“@”的左侧,第三个内部子字符串将所有内容索引到“@”的右侧,然后第二个子字符串将其解析为域,最后一个子字符串将所有内容拉到“.”的右侧。

我的错误,要查找的参数是向后的,我将编辑我的答案以修复它。我的错误,要查找的参数是向后的,我将编辑我的答案以修复它。