提取主机名顶级域的准确表示是复杂的,因为每个顶级域注册机构都可以自由制定自己的关于如何发布域和定义哪些子域的策略。由于似乎没有任何标准机构协调这些或建立标准,这使得确定实际的 TLD 变得有些复杂。
由于 Web 浏览器仅将 cookie 分配给已注册的域,并且出于安全原因必须保持警惕,以确保无法在更广泛的层面上分配 cookie,因此这些浏览器通常以某种形式包含所有已知 TLD 的数据库。我发现 Firefox 有一个相当完整的数据库:
http://hg.mozilla.org/mozilla-central/raw-file/3f91606bd115/netwerk/dns/effective_tld_names.dat
我有两个具体问题:
尽管将此列表转换为正则表达式相当简单,但是否有一个 gem 或参考正则表达式比滚动您自己的解决方案更好?tld gem 仅提供根级域的国家级信息。
有比 Firefox TLD 列表更好的参考吗?该规范正确解析了所有本地 Google 站点,但这并不是一个详尽的测试。
如果那里什么都没有,是否有人对执行这种操作的 gem 感兴趣?这种东西应该存在于 URI 模块中,但显然是缺失的。
这是我在 Ruby 中将此文件转换为可用的正则表达式的看法:
TLD_SPEC = Regexp.new(
'[^\.]+\.(' + %q[
// ***** BEGIN LICENSE BLOCK *****
// ... (Rest of file)
].split(/\n/).collect do |line|
line.sub(%r[//.*], '').sub(/\s+$/, '')
end.reject(&:blank?).collect do |s|
Regexp.escape(s).sub(/^\\\*\\\./, '[^\.]+\.')
end.join('|') + ')$'
)