使用REGEXP_SUBSTR提取网站域名时匹配结果异常如何解决
问题原因
你原正则的用法存在误解:[^https://] 属于正则否定字符集,它的作用是排除括号内所有单个字符,而非排除完整的https://字符串,也就是说匹配过程中只要遇到h、t、p、s、:、/ 任意一个字符就会停止匹配,这就是你得到异常结果的原因:
cornstalk.com前四位corn之后是s,属于被排除的字符,所以匹配截断得到cornpenny.co首字符p属于被排除的字符,所以从第二位e开始匹配得到enny.co
解决方案
场景1:所有网址固定为https://开头,且域名后无额外路径
直接替换前缀即可,写法最简单:
REGEXP_REPLACE("Website", '^https://', '')
场景2:需要兼容多种协议头、大小写差异,或域名后带路径
如果存在http://、HTTPS://这类格式,或者域名后带有路径参数(比如https://penny.co/about),用带捕获组的REGEXP_SUBSTR写法:
REGEXP_SUBSTR("Website", '^https?://([^/]+)', 1, 1, 'i', 1)
参数说明:
^https?://:匹配开头的http://或https://,?表示s可选([^/]+):捕获组,匹配所有不是/的连续字符,就是你要的域名部分- 最后的
1:指定返回第一个捕获组的内容 i参数:匹配时不区分大小写,适配大写的协议头格式
以上两种写法测试你的示例网址,都能得到ivalore.com.br、cornstalk.com、penny.co的预期结果。
内容的提问来源于stack exchange,提问作者hansolo
相关产品推荐
相关产品推荐

