2013-07-19 58 views
0

我有一個項目和問題跟蹤器的大型數據庫,其中一些有url。url的第一部分的子字符串正則表達式

我想查詢它以找出每個項目的URL列表,但許多人有額外的數據,我想避免。

我想要做這樣的事情:

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

除了一些URL是HTTPS,我想捕捉以及第一子目錄。

例如,給定的網址:

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

我想選擇返回:

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

是否有一個半簡單的方式在pgsql的串/正則表達式來做到這一點?

回答

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

+1因爲你大部分都是第一次。不過,請考慮一下[sqlfiddle](http://www.sqlfiddle.com/#!11/d41d8/46)。 –

+1

是啊我的原始我有/可選。 (和Id沒有錨定https ..如果我使用'(https?://([^ /] * /?){1,2})'它得到更多.OP要求第一個目錄也是爲什麼要跟{1,2}一起去,但是這一切都取決於內部數據是如何規範化的。 – Doon

0

更新後,我起初並不正確讀取Q。

使用圖案

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

^ ..串的開始
? ..零個或一個原子
(?:) ..非捕獲的括號
[^/]+ ..除了/任何字符,1或更多人

這隻接受以開頭的網址或https://(需要協議頭)。

->SQLfiddle with a bigger test case.

相關問題