2012-04-26 73 views
0

我想要篩選出一堆網址,以找到它們的基本網址,它不包含www或任何前綴,但是在編寫表達式來捕獲它時遇到了麻煩,但是有一部分TLD,它變成一個相當複雜的問題。正則表達式基址URL抓取

answers.yahoo.com => yahoo.com 
www.google.com => google.com 
uk.answers.yahoo.co.uk = > yahoo.co.uk 
www.g.se => g.se 

有什麼建議嗎?

我正在使用這個表達式,但是當域名不超過2個字符或者當域名tld小於2個字符時,它就會搞砸了。

(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$ 
+0

您將需要一個TLD列表。好消息是,在http://publicsuffix.org上維護了一份TLD列表。看到這個優秀的問題和答案:[從URL獲取子域](http://stackoverflow.com/questions/288810/get-the-subdomain-from-a-url) – 2012-04-26 02:54:06

回答

1

你怎麼知道uk.answers.yahoo.co.uk的基礎是yahoo.co.uk,但的基礎上,例如,foo.bar.maps.google.com ISN」 t maps.google.com?

+0

因爲,域名不能有「 「。在他們中。 – 2012-04-26 02:13:37

+0

我不確定你的意思。這個網站的域名是stackoverflow.com,它有一個。在裏面。 – Venge 2012-04-26 02:14:49

+0

我不確定我是否使用了正確的術語,但「stackoverflow」是域名,「com」是頂級域名。 – 2012-04-26 02:17:45

1
[^\.]*\.(?:co.uk|\w{2,3})$ 

您需要在正則表達式中添加已知域。

http://regexr.com?30p4r

+0

添加域列表並不可取,尤其是因爲它們似乎不斷增加名單,公司現在可以註冊。 – 2012-04-26 02:20:35

+0

那麼,那麼如何在列表中添加像'co.uk'這樣的例外呢? '[^ \。] * \。(?: co.uk | \ w {2,3})$'但是在其他情況下搜索2-3個字符。這僅僅是一個URL列表,每行一個或是在一些文本中?如果在文本中,提供它們在文本中出現的一些示例。 – Jack 2012-04-26 02:24:47