2010-12-15 165 views
1

我需要一個正則表達式來捕獲給定的URL SLD。需要一個正則表達式來捕獲二級域(SLD)

例子:

jack.bop.com -> bop 
bop.com -> bop 
bop.de -> bop 
bop.co.uk -> bop 
bop.com.br -> bop 

所有BOPS :)。因此,該正則表達式需要忽略ccTLD,gTLD ccSLD。後者是困難的部分,因爲我想保持正則表達式儘可能不復雜。

第一項任務是刪除ccTLD和gTLD,然後檢查ccSLD並刪除它們(如果存在)。 -

任何幫助是非常讚賞:)

如果有幫助,國家代碼頂級域被匹配:

\.([a-z]{2})$ 

和gTLD被匹配:

\.([a-z]{3-6})$ 

幸運的是,這是兩個互相排斥的模式。

回答

3

從技術上講,'.co.uk'是'bop.co.uk'中的第二級域名。你似乎要求的是開放給公衆註冊的域名的最高級別部分。我不知道這是否真的有一個好名字。它當然沒有很好的定義。

要找到你想要的東西,你必須列舉所有「不公開的公開註冊」後綴。您可能應該從最長到最短的時間來處理這些案例,以處理「www.british-library.uk」等案例。在此之後,正則表達式是相當簡單:

(.+\.)?([^.]+)\.(?:<suffixes>)$ 

<suffixes>將後綴您|分隔列表。一塊它會是什麼樣子:

gov\.uk|ac\.uk|co\.uk|com|org|net|us|uk 

同樣,你要訂購這些第一時間最長的(更準確地說是真實的限制就是你想要的其他元素的後綴後出現的元素 - 訂購最長的第一個是簡單的方法來滿足這個約束)。

您可以通過研究網絡瀏覽器如何處理cookie域來查找您關心的域列表。我似乎回想起瀏覽器會做一些特殊的操作,以確保你不能擁有所有co.uk的cookies。