zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ES6语法记录
    关于Vue中 render: h => h(App) 的具体含义的理解
    在Vue中结合render函数渲染指定组件
    访问者模式(Visitor)_java实现
    自底向上集成 Bottom-Up
    基于功能集成 Function-Based
    分层集成(线性关系) Layers
    持续集成(高频集成、每日集成) Continuous/High-frequency
    Selenium实现点击click()
    Selenium自动化之点击下拉框选项操作
  • 原文地址:https://www.cnblogs.com/Traner/p/3208313.html
Copyright © 2011-2022 走看看