2010-02-25 136 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/...',你的断言就会失败。 –