url的第一部分的子字符串正则表达式

时间:2013-07-19 16:05:58

标签: regex postgresql url postgresql-8.4

我有一个庞大的项目和问题跟踪器数据库,其中一些有网址。

我想查询它以找出每个项目的网址列表,但很多都有我想避免的额外数据。

我想做这样的事情:

substring(tracker_extra_field_data.field_data FROM 'http://([^/]*).*')

除了一些网址是https,我想捕获它以及第一个子目录。

例如,给定url:

https://dev.foo.com/bar/action/?param=val

我希望选择返回:

https://dev.foo.com/bar/

在pgsql中使用substring / regex有一种半简单的方法吗?

2 个答案:

答案 0 :(得分:4)

试试这个:

select substring('https://dev.foo.com/bar/action/?param=val' from '(https?://([^/]*/){1,2})');

template1=# select substring('https://dev.foo.com/bar/action/?param=val' from '(https?://([^/]*/){1,2})');
        substring
-------------------------
 https://dev.foo.com/bar/
(1 row)

template1=# select substring('http://dev.foo.com/bar/action/?param=val' from '(https?://([^/]*/){1,2})');
       substring
------------------------
 http://dev.foo.com/bar/

答案 1 :(得分:0)

在我没有正确阅读Q之后更新。

使用模式

^https?://[^/]+(?:/[^/]+)?/?

^ ..开头的字符串
? ..零或一个原子
(?:) ..非捕获的parens
[^/]+ ..除/之外的任何字符,其中一个或多个

这只接受以http://https://开头的网址(需要协议标头)。

->SQLfiddle with a bigger test case.