为什么赢了';这个正则表达式在postgreSQL中不起作用吗
我正在尝试使用正则表达式从URL字符串捕获基本URL。这个为什么赢了';这个正则表达式在postgreSQL中不起作用吗,sql,regex,postgresql,Sql,Regex,Postgresql,我正在尝试使用正则表达式从URL字符串捕获基本URL。这个 ^(.+?[^\/:])(?=[?\/]|$) 工作 但是当我尝试在postgresql中使用它时 regexp_replace(content_url,'^(.+?[^\\/:])(?=[?\\/]|$)', '\1') 它不会给出关于第一个“?”的警告 PostgreSQL在中处理惰性量词的方式不一致 带交替的正则表达式,因为它尝试匹配 最长的选择,而不是急于接受第一个 匹配的替代方案 如果您删除它,它似乎会起作用,即^(.+
^(.+?[^\/:])(?=[?\/]|$)
工作
但是当我尝试在postgresql中使用它时
regexp_replace(content_url,'^(.+?[^\\/:])(?=[?\\/]|$)', '\1')
它不会给出关于第一个“?”的警告
PostgreSQL在中处理惰性量词的方式不一致
带交替的正则表达式,因为它尝试匹配
最长的选择,而不是急于接受第一个
匹配的替代方案
如果您删除它,它似乎会起作用,即^(.+[^\/:])(?=[?\/]\$)
但是,如果您试图解析baseurl,则regex将无法工作。改用这个:
select regexp_replace('....', '^(.*:)//([a-z\-.]+)(:[0-9]+)?(.*)$', '\2')
PostGreSQL有一个有趣的正则表达式引擎。我花了一段时间才弄明白什么是逃逸,什么是双重逃逸。对我有效的解决方案是:
(regexp_matches(content_url,'(https?:\/\/\\w+(?:\\.\\w+)+)'))[1] AS content_url
希望这能帮助别人
选择regexp\u replace('http://stackoverflow.com/questions/1991608/find-base-name-in-url-in-javascript“,”^(+.+[^\/:])(?=[?\/]|$),“\1”)作为内容的url只要给我一个盒子。就像一个小的“未知字符”框。@thomas可能是转义,在这里工作。您能提供另一个可以使用postgre的解决方案吗?[错误代码:0,SQL状态:2201B]错误:无效正则表达式:无效字符范围:(
您使用的是什么版本的postgre?