如何用PostgreSQL的regexp_replace函数提取URL到端口号的部分?
解决PostgreSQL regexp_replace提取URL主机部分的问题
嘿,我明白你现在的困扰了——你想用regexp_replace提取URL里的http://localhost:8080,但之前的查询得到了相反的结果,对吧?
问题出在哪儿?
你之前写的正则(.*?/){3}是在匹配前三个包含斜杠的片段(也就是http://localhost:8080/这部分),然后把它替换成空字符串,自然就只剩下后面的路径参数了,和你想要的结果完全反过来啦。
几种正确的解决方案
这里给你两种简单有效的方法:
方法1:用substring直接提取目标片段
这种方式更直观,专门提取你需要的部分:
select substring('http://localhost:8080/redirectHome?abc=xyz&sortBy=111' from '^(https?://[^/]+)');
正则的逻辑很清晰:
^锚定字符串开头,确保从最开始匹配https?://兼容http://和https://(s?表示s是可选的)[^/]+匹配所有非斜杠的字符,直到遇到下一个斜杠就停止,刚好拿到主机部分
方法2:用regexp_replace替换掉不需要的内容
如果你坚持想用regexp_replace,可以把后面不需要的部分替换为空:
select regexp_replace('http://localhost:8080/redirectHome?abc=xyz&sortBy=111', '(/.*)$', '');
这里的(/.*)$会匹配从主机后的第一个斜杠开始,到字符串结尾的所有内容,替换为空后就剩下你要的http://localhost:8080了。
内容的提问来源于stack exchange,提问作者Vishal Gajera
相关产品推荐
相关产品推荐

