java用正则表达式获取domain

本文介绍了一种从URL中正确解析域名的方法,针对特定情况下的域名解析错误进行了修正,通过调整正则表达式的匹配策略,确保了复杂域名结构的正确处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在工作中经常用到获取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

 

 

 

转载于:https://www.cnblogs.com/Traner/p/3208313.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值