Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么赢了';这个正则表达式在postgreSQL中不起作用吗_Sql_Regex_Postgresql - Fatal编程技术网

为什么赢了';这个正则表达式在postgreSQL中不起作用吗

为什么赢了';这个正则表达式在postgreSQL中不起作用吗,sql,regex,postgresql,Sql,Regex,Postgresql,我正在尝试使用正则表达式从URL字符串捕获基本URL。这个 ^(.+?[^\/:])(?=[?\/]|$) 工作 但是当我尝试在postgresql中使用它时 regexp_replace(content_url,'^(.+?[^\\/:])(?=[?\\/]|$)', '\1') 它不会给出关于第一个“?”的警告 PostgreSQL在中处理惰性量词的方式不一致 带交替的正则表达式,因为它尝试匹配 最长的选择,而不是急于接受第一个 匹配的替代方案 如果您删除它,它似乎会起作用,即^(.+

我正在尝试使用正则表达式从URL字符串捕获基本URL。这个

^(.+?[^\/:])(?=[?\/]|$)
工作

但是当我尝试在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[错误代码:0,SQL状态:2201B]错误:无效正则表达式:无效字符范围:(
您使用的是什么版本的postgre?