2010-02-25 138 views
1

我如何解析Objective-C中的域名?從URL字符串解析域名

例如,如果我的字符串值「http://www.google.com」我想解析出字符串「谷歌」

+0

澄清的要求 - 你是什麼想從meta.stackoverflow.com得到? – Vladimir

+1

並從www.gov.yk.ca –

+0

這將是「stackoverflow」。 我剛剛發現用「。」分隔字符串到數組中。刪除器然後選擇數組[1]。我不認爲這是可擴展的? – dubbeat

回答

7

我認爲這個問題是一點點無效。主機取決於其FQDN(完全合格的域名),在您的示例中,該域名是www.google.com。這與mail.google.comwww.google.infogoogle.com不一樣。選出「谷歌」並不是微不足道的,從URL的角度來看沒有多大意義。

如果你想只是解析URL更多或更少的智能,我認爲你可以做到以下幾點:

  1. 使用NSURL的-host方法來獲得正確的剝離方案和路徑/查詢。
  2. 使用NSString的-componentsSeparatedByString:方法來獲取域名「組件」的數組。
  3. 忽略最後一個組件。
  4. 如果只剩下一個組件(或者它可能足以採用倒數第二個組件),那麼就完成了。
  5. ,第一成分中含有「WWW」像www3,「FTP」,「郵件」或他們的那種東西,你可以如果你喜歡忽略這一點。其餘的可能是有趣的,這取決於你的需求。
  6. 測試你的,萬周夫莫開的網址算法得到這個任務的徒勞感;)
+0

:)謝謝你。 我想知道如何做到這一點的原因是因爲我從服務器提供了幾個URL。這些URL將99.9%的時間格式爲「http://www.thesite.com」,因此對於我的目的而言,這可能是暫時的快捷方式。 我只想顯示網站名稱。這將是很好的網址和網站命名單獨返回,但我目前無法控制此 – dubbeat

3

在iOS中7,你可以使用NSURLComponents類:

NSURLComponents *components = [[NSURLComponents alloc] initWithString:@"http://stackoverflow.com/questions/2333972/objective-c-parse-domain-name-from-url-string"]; 
NSAssert([components.host isEqualToString:@"stackoverflow.com"], nil); 
+0

只是FYI,'主機'包括給定的URL的子域。所以如果URL是'www.stackoverflow.com/...',你的斷言就會失敗。 –