在MySQL 8.0.11中使用REGEXP_REPLACE提取域名的技术问询
解决MySQL中提取核心域名的问题
针对你在MySQL 8.0.11中提取www.google.com、www.yahoo.com这类URL里核心域名(google、yahoo)的需求,我给你几个靠谱的解决方案,包括修正后的正则写法和更简单的字符串函数方法:
方法一:修正REGEXP_REPLACE正则表达式
你之前的正则问题在于把整个匹配的内容都替换成了空字符串,所以结果不对。我们可以换两种思路来写:
思路1:直接替换掉前后多余部分
这个写法会匹配并移除开头的www.和结尾的.com,适合只处理这类格式的URL:
SELECT REGEXP_REPLACE(url, '^www\\.|\\.com$', '') AS core_domain FROM web_url;
^www\\.:匹配字符串开头的www.(注意MySQL正则里.需要转义成\\.)\\.com$:匹配字符串结尾的.com|:表示“或”的逻辑,把这两部分都替换为空,剩下的就是核心域名
思路2:捕获中间核心部分(更严谨)
如果想只匹配www.xxx.com这种完整格式的URL,避免其他格式被误处理,可以用分组捕获中间的核心内容:
SELECT REGEXP_REPLACE(url, '^www\\.(.*)\\.com$', '$1') AS core_domain FROM web_url;
(.*):捕获www.和.com之间的所有内容$1:引用第一个分组捕获到的内容,也就是我们要的核心域名
如果之后需要支持.net、.org这类其他后缀,可以扩展正则:
SELECT REGEXP_REPLACE(url, '^www\\.(.*)\\.(com|net|org)$', '$1') AS core_domain FROM web_url;
方法二:用字符串函数替代正则(更高效)
对于你这种固定格式的URL,用SUBSTRING_INDEX组合操作会比正则更简单高效:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(url, '.', 2), '.', -1) AS core_domain FROM web_url;
- 第一步
SUBSTRING_INDEX(url, '.', 2):把URL按.分割,取前2部分,得到www.google - 第二步
SUBSTRING_INDEX(..., '.', -1):把上面的结果再按.分割,取最后1部分,就得到google
测试验证
以上几种方法,对于你的样本数据www.google.com和www.yahoo.com,都会正确返回google和yahoo,你可以根据自己的实际需求选择合适的方案。
内容的提问来源于stack exchange,提问作者Er. Amit Joshi
相关产品推荐
相关产品推荐

