【发布时间】:2012-08-15 19:32:55
【问题描述】:
可能重复:
What are the Java regular expressions for matching IPv4 and IPv6 strings?
谁有解压给定 IPv6 地址的 java 代码。
我发现写正则表达式真的很难。
【问题讨论】:
-
你能展示你的代码/你所做的努力吗?
-
所以你想要 ipv6 addr 的正则表达式?
可能重复:
What are the Java regular expressions for matching IPv4 and IPv6 strings?
谁有解压给定 IPv6 地址的 java 代码。
我发现写正则表达式真的很难。
【问题讨论】:
其中一个应该可以帮助您:
public static final String IPV6_HEX4DECCOMPRESSED_REGEX = "\\A((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::((?:[0-9A-Fa-f]{1,4}:)*)(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z";
public static final String IPV6_6HEX4DEC_REGEX = "\\A((?:[0-9A-Fa-f]{1,4}:){6,6})(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z";
public static final String IPV6_HEXCOMPRESSED_REGEX = "\\A((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)\\z";
public static final String IPV6_REGEX = "\\A(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\\z";
还可以查看Inet6Address class,这将使您的生活更轻松。
参考:
【讨论】:
既然可以使用Inet6Address.getHostAddress,为什么还要使用正则表达式?
final String compressed = "1080::8:800:200c:417a";
final String decompressed = "1080:0:0:0:8:800:200c:417a";
try {
final Inet6Address addr = (Inet6Address) InetAddress.getByName(compressed);
assert addr.getHostAddress().equals(decompressed);
} catch (UnknownHostException ex) { }
【讨论】:
1080:0000:0000:0000:0008:0800:200c:417a,而不是1080:0:0:0:8:800:200c:417a。