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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM