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

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));
}
}
注意事项
- 正则表达式方法可能无法处理所有边缘情况,特别是 IPv6 地址的压缩形式
- Java 内置的 InetAddress 方法更可靠,但可能更严格
- 对于生产环境,建议使用 InetAddress 方法或专门的 IP 地址验证库
- 如果需要同时支持 IPv4 和 IPv6,可以编写一个综合验证方法
希望这些信息对你有所帮助!


