【发布时间】:2011-11-05 05:54:50
【问题描述】:
我使用以下方法从 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, "");
}
我可以得到以下结果:
google.com
hopperspot.com
socialrating.it
blogspot.com
xtop10.net
zoyanailpolish.blogspot.com
前四个案例都不错。最后一个不好。我想要的是:blogspot.com 最后一个,但它给出了zoyanailpolish.blogspot.com。我做错了什么?
【问题讨论】:
-
看起来this post 中的正则表达式可能会对您有所帮助 =)
-
那么不要在你的模式中加入那些愚蠢的 woublewoos。如果您只想
s/^[^.]+\.//,那么我建议您这样做。 -
虽然不清楚你想要什么。您是要删除第一个组件always,还是除 TLD 之前的组件之外的所有组件,还是仅当它以“ww”或 .... 开头时才删除第一个组件?
-
example.com.tw和example.co.uk这样的域怎么样? -
那么不要使用硬正则表达式的方式。使用正则表达式来解决这类问题是荒谬的。将点拆分为数组。数零件。检查倒数第二部分是否不是 co 开头(可能还有其他您想要匹配的 ccTLD)。根据结果抓住最后两个或三个项目,然后再次将它们连接在一起。
标签: java regex url domain-name