解压缩IPv6地址的Java代码

解压缩IPv6地址的Java代码,java,ipv6,Java,Ipv6,可能重复: 是否有人有java代码来解压缩给定的IPv6地址 我发现编写正则表达式非常困难。其中一个应该可以帮助您: 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|

可能重复:

是否有人有java代码来解压缩给定的IPv6地址


我发现编写正则表达式非常困难。

其中一个应该可以帮助您:

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";
另外,看看哪一个会让你的生活更轻松

参考资料:


    • 既然可以使用正则表达式,为什么还要使用正则表达式


      你能展示一下你的代码吗?你想要ipv6地址的正则表达式吗?大卫,我在网上搜索了一下,找到了一些正则表达式。坦白地说,我不太喜欢编写正则表达式,因此我正在寻找java代码。@user1601302您看过我答案底部的Inet6Address类链接了吗?是的,David,我看到了。我想知道如果我使用Inet6Address类,是否会进行DNS查找。我的情况是,用户正在键入地址,我需要验证并解压缩它。Veer,如果我尝试打印addr.getHostAddress(),它不会打印标准格式。这是我获取规范格式的一种方法。@user1601302您可以通过一些字符串操作来实现它。是的,我想是的…:)。。。我希望使用InetAddress不会进行DNS查找。@user1601302如果它是地址的文本表示,则不需要进行DNS查找。完整的解压缩格式是
      1080:0000:0000:0000:0008:0800:200c:417a
      ,而不是
      1080:0:0:0:8:800:200c:417a
      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) { }