有什么算法可以解决这个问题吗?例如
twitter.com
zamg.ac.at是顶级域,并且
pic.twitter.com是否为二级域
发布于 2014-08-14 18:42:56
定义:
不,AFAIK是这样的:
示例:pic.twitter.com
顶级域:com二级域:twitter子域:pic (以及pic之前的所有其他潜在部分)
换句话说,模式应该是(subdomain.)*secondlevel.toplevel
因此:zamg.ac.at将不是顶级域,而是ac.at的子域,其tld为at。
算法:
您可以拆分这些点,并使用最后一部分作为tld,倒数第二部分作为第二级,其余部分作为子域。
但是,如果您希望将zamg.ac.at和twitter.com定义为应用程序语义上下文中的顶层(不要将其与对顶层的一般理解混淆),则需要一些映射,因为没有明显的模式。
为什么需要映射:
以.co.uk为例:目前有google.co.uk,在你的语义中它是顶级的,但AFAIK现在也可以注册google.uk (我想说这只是一个时间问题),所以这两个域将处于同一级别(至少我理解你的问题),但有不同的部分数量。
至于.uk,你不能使用模式[^\.]+(\.\w{2})?\.\w{2}$来找到域的“顶层”部分,因为可能有“顶层”域使用更长的实际第二层部分,例如.ltd.uk或.police.uk。这只适用于.uk的tld,还有很多其他的。
发布于 2016-10-03 22:49:03
正如在前面的回答中所提到的,您需要一个映射--最好的映射来源是publicsuffix.org,它为此目的维护了一个详细的规则列表。在许多编程语言中都有一系列的库(完整的列表是here),它们可以确定给定的URL的TLD (更准确地说是:可注册的域部分)。
下面是一个使用whois-server-list从主机获取可注册域的示例!图书馆。URL字符串变量是有效host (例如www.publicsuffix.org)的主机部分。PublicSuffixList和PublicSuffixListFactory是de.malkusch.whoisServerList.publicSuffixList包的类。
PublicSuffixListFactory factory = new PublicSuffixListFactory();
PublicSuffixList suffixListResolver = factory.build();
String registrableDomain = suffixListResolver.getRegistrableDomain(host); https://stackoverflow.com/questions/25306049
复制相似问题