在工做中常常用到獲取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; } }
下面是測試方法dom
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
/** * 根據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; } }
修改後測試結果spa
likunran.com
likunran.com
taobao.comcode