使用regexp_replace清理URL域名后缀异常,求正确正则写法
问题原因
你的正则表达式里的.是正则特殊字符,代表任意单个字符,而非字面量的点号。所以.com会匹配任意字符+com,.net会匹配任意字符+net,这就导致非目标位置的字符被错误替换。另外,你没加结尾锚点$,正则会匹配字符串中所有符合模式的片段,而非仅结尾的URL后缀。
解决方案
把点号转义为\.,并添加结尾锚点$来限定只替换字符串末尾的.com或.net,如果需要匹配更多后缀,可以扩展括号内的内容:
SELECT id, url, regexp_replace(url, '\.(com|net)$', '', 'g') FROM companies;
如果你的需求是替换所有出现的.com/.net(不仅仅是结尾),去掉$即可:
SELECT id, url, regexp_replace(url, '\.(com|net)', '', 'g') FROM companies;
针对你的例子network_company.net,使用带$的正则会精确替换末尾的.net,得到预期结果network_company。
内容的提问来源于stack exchange,提问作者ltx
相关产品推荐
相关产品推荐

