给定网站地址,例如
http://www.example.com/page1/#
https://subdomain.example2.co.uk/asdf?retrieve=2
如何返回根域R
, e.g.
example.com
example2.co.uk
出于我的目的,我将定义根域以具有结构
example_name.public_suffix
其中 example_name 不包括“www”,并且 public_suffix 位于此处的列表中:
https://publicsuffix.org/list/ effective_tld_names.dat https://publicsuffix.org/list/effective_tld_names.dat
这仍然是最好的基于正则表达式的解决方案吗:
https://stackoverflow.com/a/8498629/2109289 https://stackoverflow.com/a/8498629/2109289
里面的东西怎么样R
根据公共后缀列表解析根域,例如:
http://simonecarletti.com/code/publicsuffix/ http://simonecarletti.com/code/publicsuffix/
编辑:根据理查德的评论添加额外信息
Using XML::parseURI
似乎返回第一个“//”和“/”之间的内容。例如
> parseURI("http://www.blog.omegahat.org:8080/RCurl/index.html")$server
[1] "www.blog.omegahat.org"
因此,问题归结为有一个R
可以从 URI 返回公共后缀的函数,或者在公共后缀列表上实现以下算法:
Algorithm
- 将域与所有规则进行匹配并记下匹配的规则。
- 如果没有匹配的规则,则优先规则为“*”。
- 如果有多个规则匹配,则优先规则是例外规则。
- 如果没有匹配的例外规则,则优先规则是标签最多的规则。
- 如果现行规则是例外规则,请通过删除最左边的标签来修改它。
- 公共后缀是来自域的一组标签,它们直接与现行规则的标签匹配(用点连接)。
- 已注册或可注册domain是公共后缀加上一个附加标签。