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

  • 相关阅读:
    ES 遇到 unassigned shard如何处理?
    elasticsearch如何安全重启
    Agg学习笔记
    二进制文件中读写结构体
    C语言 结构体数组保存到二进制文件中
    Memcache 笔记
    memcached完全剖析–1. memcached的基础
    Redis和Memcache对比及选择
    Exploring the MapBox stack: MBTiles, TileJSON, UTFGrids and Wax
    Tilemill + tilestream + mapbox.js 自制地图
  • 原文地址:https://www.cnblogs.com/Traner/p/3208313.html
Copyright © 2011-2022 走看看