这有什么算法吗? 例如
twitter.com
zamg.ac.at
是顶级域名 和
pic.twitter.com
是二级域名
答案 0 :(得分:1)
<强>定义:强>
不,AFAIK是这样的:
示例:pic.twitter.com
顶级域名:com
二级域名:twitter
子域名:pic
(以及pic
之前的所有其他潜在部分)
换句话说,架构为(subdomain.)*secondlevel.toplevel
因此:zamg.ac.at
不是顶级域名,而是ac.at
的子域名,其中tld为at
。
<强>算法:强>
您可以分割点并使用最后一部分作为tld,倒数第二部分作为第二级,其余部分作为子域。
但是,如果您要将zamg.ac.at
和twitter.com
定义为应用语义上下文中的顶级(不要将其与对toplevel的一般理解混淆)那么您和& #39; d需要一些映射,因为没有明显的模式。
为什么您需要映射:
以.co.uk
为例:目前您的语义中有google.co.uk
为顶级,但AFAIK现在也可以注册google.uk
(我和#39} ; d说这只是一个时间问题,所以这两个领域将处于同一水平(至少我理解你的问题),但有不同数量的部分。
对于.uk
,您无法使用模式[^\.]+(\.\w{2})?\.\w{2}$
来查找&#34;顶级&#34;域名的一部分,因为可能有&#34;顶级&#34;域使用较长的实际二级部分,例如.ltd.uk
或.police.uk
。而这仅适用于.uk
tld,还有很多其他人。
答案 1 :(得分:0)
如上一个答案所述,您需要一个映射 - 最好的来源是publicsuffix.org,它为此目的维护一个详细规则列表。 许多编程语言都有一系列库(全面的列表是here),它可以在给定URL的情况下确定TLD(更确切地说:可注册的域部分)。
以下是使用[whois-server-list] https://github.com/whois-server-list/public-suffix-list从主机获取可注册域名的示例!图书馆。 host
字符串变量是有效URL的主机部分(例如www.publicsuffix.org)。 PublicSuffixList
和PublicSuffixListFactory
是de.malkusch.whoisServerList.publicSuffixList
包的类。
PublicSuffixListFactory factory = new PublicSuffixListFactory();
PublicSuffixList suffixListResolver = factory.build();
String registrableDomain = suffixListResolver.getRegistrableDomain(host);