为什么这个正则表达式在postgreSQL中不起作用

时间:2014-09-05 16:26:18

标签: sql regex postgresql

我试图让正则表达式从URL字符串中捕获基本URL。此

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

的工作原理。 REGEX101

但是当我尝试在postgresql中使用它时

regexp_replace(content_url,'^(.+?[^\\/:])(?=[?\\/]|$)', '\1') 

它没有

2 个答案:

答案 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

希望这可以帮助某人。