You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:38:12