【问题标题】:Java code to decompress an IPv6 address [duplicate]用于解压缩 IPv6 地址的 Java 代码 [重复]
【发布时间】:2012-08-15 19:32:55
【问题描述】:

可能重复:
What are the Java regular expressions for matching IPv4 and IPv6 strings?

谁有解压给定 IPv6 地址的 java 代码。

我发现写正则表达式真的很难。

【问题讨论】:

  • 你能展示你的代码/你所做的努力吗?
  • 所以你想要 ipv6 addr 的正则表达式?

标签: java ipv6


【解决方案1】:

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

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,这将使您的生活更轻松。

参考:

【讨论】:

  • 大卫,我在网上做了一些搜索,发现了一些正则表达式。坦率地说,我不太习惯编写正则表达式,因此我正在寻找 java 代码。
  • @user1601302 你看过我答案底部的 Inet6Address Class 链接吗?
  • 是的,大卫,我看到了。我想知道我是否使用 Inet6Address 类,这将是一个 DNS 查找。我的情况是用户键入地址,我需要验证并解压缩它。
【解决方案2】:

既然可以使用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) { }

【讨论】:

  • Veer,如果我尝试打印 addr.getHostAddress(),它不会打印我的规范形式。是我可以获得规范形式的一种方式。
  • @user1601302 你可以通过一些字符串操作来做到这一点。
  • 是的,我是这么认为的... :)...而且我希望使用 InetAddress 不会进行 DNS 查找...
  • @user1601302 如果它是地址的文本表示,则不需要进行 DNS 查找。
  • 完整的解压格式是1080:0000:0000:0000:0008:0800:200c:417a,而不是1080:0:0:0:8:800:200c:417a
猜你喜欢
  • 2011-10-26
  • 1970-01-01
  • 2017-11-09
  • 2014-11-15
  • 2011-04-15
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多