java用正则表达式获取domain
在工作中经常用到获取url的来源和域名的黑白名单功能.前段时间写了一个获取url中域名的方法.但是在测试过程中发现有些小问题.
/** * 根据URL获取domain * @param url * @return */ public static String getDomainForUrl(String url){ String domainUrl = null; if (url == null) { return null; } else { Pattern p = Pattern.compile("(?<=http://|\\.)[^.]*?\\.(com|cn|net|org|biz|info|cc|tv)",Pattern.CASE_INSENSITIVE); Matcher matcher = p.matcher(url); matcher.find(); domainUrl = matcher.group(); return domainUrl; } }
下面是测试方法
public static void main(String[] args) { System.out.println(getDomainForUrl("www.likunran.com")); System.out.println(getDomainForUrl("www.likunran.com")); System.out.println(getDomainForUrl("atongbei.likunran.com.taobao.com")); }
执行结果
likunran.com
likunran.com
likunran.com
发现当域名正常时候取出来域名是正常的.如果域名里包含自己的域名就跪了.经过分析是正则表达式的匹配顺序有问题.故修改代码如下
/** * 根据URL获取domain * @param url * @return */ public static String getDomainForUrl(String url){ String domainUrl = null; if (url == null) { return null; } else { Pattern p = Pattern.compile("(?<=http://|\\.)[^.]*?\\.(com|cn|net|org|biz|info|cc|tv)",Pattern.CASE_INSENSITIVE); Matcher matcher = p.matcher(url); while(matcher.find()){ domainUrl = matcher.group(); } return domainUrl; } }
修改后测试结果
likunran.com
likunran.com
taobao.com
遇见了就不要错过
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步