Java正则表达式提取字符串中的IPv4/IPv6地址工具类

本文介绍了一个实用的Java工具类,用于识别和提取IPv4及IPv6地址。通过使用正则表达式,该工具能够准确地从给定的文本中找出所有符合IPv4和IPv6规范的地址,并提供了一个示例来展示其功能。

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

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @author: Max
 * @Description: IPjug
 * @date: 2021-05-21 下午 4:37
 **/
public class IPUtils {

    /**
     * 标准IPv4地址的正则表达式:可以在字符串中提取IPv4地址
     */
    private static final Pattern IPV4_REGEX_NORMAL = Pattern.compile(
                    "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");

    /**
     * 全格式IPv6正则表达式:可以在字符串中提取IPv6地址
     */
    private static final Pattern IPV6_REGEX_NORMAL = Pattern.compile(
     "((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?");


    /**
     * 判断是否为IPv4地址
     */
    public static boolean isIPv4(String ip){
        return IPV4_REGEX_NORMAL.matcher(ip).matches();
    }

    /**
     * 判断是否为IPv6地址
     */
    public static boolean isIPv6(String ip){
        return IPV6_REGEX_NORMAL.matcher(ip).matches();
    }


    /**
     * 正则提前字符串中的IP地址
     * @param ipString
     * @return
     */
    public static List<String> getIps(String ipString){
        List<String> ips = new ArrayList<String>();
        Matcher v4m = IPV4_REGEX_NORMAL.matcher(ipString);
        Matcher v6m = IPV6_REGEX_NORMAL.matcher(ipString);
        while (v4m.find()) {
            String ipv4 = v4m.group();
            ips.add(ipv4);
        }
        while (v6m.find()){
            String ipv6 = v6m.group();
            ips.add(ipv6);
        }
        return ips;
    }

    public static void main(String[] args) {
        String ipString="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROT0cOL=TCP)(HOST= 10.15.96.14)(PORT=1521))(ADDRESS=(PROTOcOL=TCP)(HOST=10.15.96.15)(PORT=1521))(LoAD_BALANCE=no)(FAILOVER=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=RWA)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=10)(DELAY=10))))";
        List<String> ips = getIps(ipString);
        System.out.println(ips.toString());
        boolean iPv4 = isIPv4(ips.get(0));
        boolean iPv6 = isIPv6(ips.get(1));
        System.out.println(iPv4);
        System.out.println(iPv6);
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值