2013-07-27 22 views
1

有沒有辦法拆分柱爲標記,並加入他們(就像你可以在其他的編程語言如Python,Java和Ruby)的Postgres - 如何拆分和加入?

我有網址列,如「http://www.Yahoo.com」,和我想從中提取「Yahoo.com」(主域名,而不是子域名)。該URL可以是形式:

我打算用正則表達式來提取HTTP後一切: //和下一個斜槓之前。然後按照句號(。)分割網址,然後加入最後2個令牌。

與正則表達式,我可以從http://www.yahoo.com提取www.yahoo.com。通過split/joins,我可以從www.yahoo.com上獲取yahoo.com。問題是我不知道如何與Postgres進行分割/連接。

任何人都知道一種方式?還是更好的選擇?

回答

3

這是不太你問的方式與它們匹配,但應該得到你想要的東西:

vinod=# select * from table; 
      url     
---------------------------------- 
http://www.domain.com 
http://domain.com 
http://domain.com/page/page1 
http://www.domain.com/page/page2 
http://www.domain.com/ 
(5 rows) 

vinod=# select substring(substring(url from 'http[s]*://([^/]+)') from '\w+\.\w+$') from table; 
substring 
------------ 
domain.com 
domain.com 
domain.com 
domain.com 
domain.com 
(5 rows) 

substring命令翻出全域,並且外部substring命令抽出最後兩個片段。 Postgresql的拆分和連接命令並不像平均腳本語言那樣強大,所以如果可以的話,我會在將數據從數據庫中提取出來之後進行這種操作。

0

你可以用\w+.[^.]+$

http://www.domain.com -> domain.com 
http://domain.com -> domain.com 
http://domain.com/page/page1 -> domain.com/page/page1 
http://www.domain.com/ -> domain.com/ 
http://www.domain.com/page/page2 -> domain.com/page/page2 
+0

我想http://domain.com/page/page1 - > domain.com雖然..我該怎麼做? –

+0

那麼怎麼樣的東西像'選擇子字符串(子字符串(從'(\ w + [。])?\ w + [。] \ w +')從'\ w + [。] \ w + $'從表' –

0

分裂的事情到令牌可以在相當多的方法來實現:

  • regexp_split_to_table/regexp_split_to_array
  • string_to_array(爲簡單的固定delimter分裂)
  • 手冊substring提取或substring(... from 'pattern')
  • 全文搜索的to_tsvectorto_tsquery
  • Procedural lan瓜哥的庫,例如Perl或Python URL庫的Python + NLTK自然語言處理等

在這種情況下,你可以做你的網址分裂使用regexp_split_....正則表達式,這或許對許多用途確定 - 但可能不是這個。試想一下:

  • 我的領域,ringerc.id.au(即 「主」 域)
  • www.ecu.edu.au( 「主」 域名是ecu.edu.au
  • www.transperth.wa.gov.au( 「主」 域名transperth.wa.gov.au
  • tartarus.uwa.edu.au(「main」域名是uwa.edu.au

祝你好運用正則表達式處理所有國家登記處和登記處變體。使用合適的URL解析器來解壓縮域,然後使用適當的域感知庫來計算出「主」域用於您的目的。我建議先使用plperl和the URL::SplitURI模塊。或者您所需的任何受支持的過程語言(Python,TCL,無論)的URL解析器。然後找到適合該語言的圖書館,根據您想要和使用的標準有意義地標識域名和子域名,而不僅僅依賴正則表達式。

當你的加盟同樣有很多選擇:

  • array_to_string
  • string_agg
  • ||連接符
  • 程序語言的字符串操作和庫

對於URL的工作,再次我會建議用一個PL具有適當的本地URL庫。