杰瑞科技汇

Java正则表达式如何精准匹配IP地址?

Java 正则表达式匹配 IP 地址

在 Java 中,可以使用正则表达式来验证和匹配 IP 地址,下面我将介绍几种常见的 IP 地址匹配方式。

Java正则表达式如何精准匹配IP地址?-图1
(图片来源网络,侵删)

IPv4 地址正则表达式

IPv4 地址由四个十进制数组成,每个数范围在 0-255 之间,用点号分隔。

简单版本(不严格验证 0-255 范围)

String ipv4Pattern = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";

严格版本(验证 0-255 范围)

String ipv4Pattern = 
    "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$";

IPv6 地址正则表达式

IPv6 地址更复杂,可以使用以下正则表达式:

String ipv6Pattern = 
    "^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|" +
    "^(([0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4})?::(([0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4})?$";

完整示例代码

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class IPAddressValidator {
    private static final String IPV4_PATTERN = 
        "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$";
    private static final String IPV6_PATTERN = 
        "^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|" +
        "^(([0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4})?::(([0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4})?$";
    private static final Pattern patternIPv4 = Pattern.compile(IPV4_PATTERN);
    private static final Pattern patternIPv6 = Pattern.compile(IPV6_PATTERN);
    public static boolean validateIPv4(final String ip) {
        Matcher matcher = patternIPv4.matcher(ip);
        return matcher.matches();
    }
    public static boolean validateIPv6(final String ip) {
        Matcher matcher = patternIPv6.matcher(ip);
        return matcher.matches();
    }
    public static void main(String[] args) {
        String[] testIPs = {
            "192.168.1.1",    // 有效 IPv4
            "255.255.255.255", // 有效 IPv4
            "0.0.0.0",        // 有效 IPv4
            "256.1.2.3",      // 无效 IPv4
            "192.168.01.1",   // 无效 IPv4(前导零)
            "2001:0db8:85a3:0000:0000:8a2e:0370:7334", // 有效 IPv6
            "2001:db8:85a3::8a2e:370:7334",            // 有效 IPv6(压缩形式)
            "2001:0db8:85a3:::8a2e:0370:7334",        // 无效 IPv6(多个::)
            "2001:0db8:85a3:0:0:8a2e:0370:7334"       // 有效 IPv6
        };
        for (String ip : testIPs) {
            System.out.println(ip + " is valid IPv4? " + validateIPv4(ip));
            System.out.println(ip + " is valid IPv6? " + validateIPv6(ip));
            System.out.println();
        }
    }
}

使用 Java 内置方法验证 IP 地址

除了正则表达式,Java 也提供了内置的 InetAddress 类来验证 IP 地址:

import java.net.InetAddress;
import java.net.UnknownHostException;
public class IPAddressValidator {
    public static boolean isValidIP(String ip) {
        try {
            InetAddress.getByName(ip);
            return true;
        } catch (UnknownHostException e) {
            return false;
        }
    }
    public static void main(String[] args) {
        String ip = "192.168.1.1";
        System.out.println(ip + " is valid? " + isValidIP(ip));
    }
}

注意事项

  1. 正则表达式方法可能无法处理所有边缘情况,特别是 IPv6 地址的压缩形式
  2. Java 内置的 InetAddress 方法更可靠,但可能更严格
  3. 对于生产环境,建议使用 InetAddress 方法或专门的 IP 地址验证库
  4. 如果需要同时支持 IPv4 和 IPv6,可以编写一个综合验证方法

希望这些信息对你有所帮助!

Java正则表达式如何精准匹配IP地址?-图2
(图片来源网络,侵删)
Java正则表达式如何精准匹配IP地址?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇