我试图让正则表达式从URL字符串中捕获基本URL。此
^(.+?[^\/:])(?=[?\/]|$)
的工作原理。 REGEX101
但是当我尝试在postgresql中使用它时
regexp_replace(content_url,'^(.+?[^\\/:])(?=[?\\/]|$)', '\1')
它没有
答案 0 :(得分:1)
RegexBuddy会针对第一个&#39; <&#39;
发出警告PostgreSQL处理惰性量词的方式不一致 具有交替的正则表达式,因为它试图匹配 最长的选择,而不是渴望和接受第一个 符合
的替代方案
如果你将其删除,它似乎有效,即^(.+[^\/:])(?=[?\/]|$)
select regexp_replace('....', '^(.*:)//([a-z\-.]+)(:[0-9]+)?(.*)$', '\2')
答案 1 :(得分:0)
PostGreSQL有一个有趣的正则表达式引擎。我花了一段时间来弄清楚什么是逃逸,什么需要双重逃脱。对我有用的解决方案是:
(regexp_matches(content_url,'(https?:\/\/\\w+(?:\\.\\w+)+)'))[1] AS content_url
希望这可以帮助某人。