2011-02-14 176 views
0

我有一個正則表達式http\:\/\/domainname\.com\/\S{4}它應該可以捕獲像這樣的url:http://domainname.com/key4在一個更長的文本。postgresql的正則表達式和子字符串

我想只獲得密鑰並將其與postgres數據庫中的表字段匹配。

嘗試一些東西,我來到這個查詢(抓取鍵)後:

SELECT substring(infos FROM '[http\:\/\/domainname\.com\/\S{4}]{7}') AS key FROM actions 

,結果我得到的/domainname.com的每一行...好了,沒有鑰匙,你可以看到。

我做錯了什麼?

誰能告訴我{7}代表什麼?

回答

1

{7}代表先前模式的7倍。因此在這種情況下,[]之間的不同字符。即[abc]{3}匹配aaacba或任何其他組合。

我相當肯定,這不是你想要的。您可能正在尋找這樣的事情,而不是:

SELECT substring('http://domainname.com/key4' from 'http://domainname\\.com/\\S{4}') 
FROM actions 
+0

我得到NULL作爲結果的每一行... – helle 2011-02-14 14:00:34

0

這可能是你在找什麼在這種特殊情況下

select substring(substring('long text [http://domainname.com/key4] more text',E'http\:\/\/domainname\.com\/\\S{4}'),E'\\S{4}$'); 

將提取關鍵部分,如果它是四個字符長。如果您也可能會尋找類似key456那麼更通用的匹配,如

select substring(substring('long text [http://domainname.com/key467] more text',E'http\:\/\/domainname\.com\/key\\d+'),E'key\\d+$'); 

可能更適合