我有一个庞大的项目和问题跟踪器数据库,其中一些有网址。
我想查询它以找出每个项目的网址列表,但很多都有我想避免的额外数据。
我想做这样的事情:
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有一种半简单的方法吗?
答案 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://
开头的网址(需要协议标头)。