首先从URL获取子域很容易.
http://www.domain.example
Run Code Online (Sandbox Code Playgroud)
扫描第一个时间段然后返回"http://"之后的任何内容......
然后你记得
http://super.duper.domain.example
Run Code Online (Sandbox Code Playgroud)
哦.所以,你想,好吧,找到最后一个时期,回过头来获取一切!
然后你记得
http://super.duper.domain.co.uk
Run Code Online (Sandbox Code Playgroud)
而你又回到了原点.除了存储所有顶级域名列表外,任何人都有任何好主意吗?
从没有子域的URL获取域的正确方法是什么?
在Java中,您可以从字符串中创建新URL(urlString)并在URL上调用getHost(),但是您有子域名.
问题是因为可能存在以下主机:subhost.example.com和subhost.example.co.uk
这两个部分领域还有其他几个领域,如co.uk(请参阅https://wiki.mozilla.org/TLD_List上的列表).
在我看来,只获取域名的唯一正确方法是通过TLD列表进行搜索,从主机末尾删除TLD,并在主机的最后一段时间之前取走所有内容.是否有现成的方法可以做到这一点?我没有在java.net.URL中看到一个,我检查了一些apache公共但在那里找不到.
我使用以下内容从URL中提取域:(它们是测试用例)
String regex = "^(ww[a-zA-Z0-9-]{0,}\\.)";
ArrayList<String> cases = new ArrayList<String>();
cases.add("www.google.com");
cases.add("ww.socialrating.it");
cases.add("www-01.hopperspot.com");
cases.add("wwwsupernatural-brasil.blogspot.com");
cases.add("xtop10.net");
cases.add("zoyanailpolish.blogspot.com");
for (String t : cases) {
String res = t.replaceAll(regex, "");
}
Run Code Online (Sandbox Code Playgroud)
我可以得到以下结果:
google.com
hopperspot.com
socialrating.it
blogspot.com
xtop10.net
zoyanailpolish.blogspot.com
Run Code Online (Sandbox Code Playgroud)
前四个案例都很好.最后一个不好.我想要的是:blogspot.com对于最后一个,但它给出了zoyanailpolish.blogspot.com.我究竟做错了什么?