我正在寻找 ipv4 和 ipv6 的测试正则表达式 InetSocketAddress (即 IP 地址 + 端口号)。我对验证主机名不感兴趣。
它可以是两个正则表达式(一个用于 ipv4,一个用于 ipv6)或一个组合的正则表达式。
有没有人可以分享?
编辑
有关 ip4 格式的信息,请参阅 here , 有关 ipv6 格式的信息,请参阅 here .然后,端口号加上':'。
编辑 2 要创建字符串表示,我将这样进行:
byte[] tmp = { 10, 1, 0, 0 };
InetSocketAddress isa = new InetSocketAddress(
InetAddress.getByAddress(tmp), 443);
返回:
/10.1.0.0:443
最佳答案
尝试在 InetSocketAddress
的 .toString()
上使用正则表达式来执行此操作可能不是一个好主意。 (见上面问题的评论)
一种可能的替代方法是使用 URL或 URI以字符串格式打印地址,即much more standardized .
**编辑:**
另一方面,如果你想用正则表达式折磨自己......;-)
IPv4:
Pattern: .*/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)
Java constant: ".*/([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+):([0-9]+)"
仅处理点分四组格式地址。不检测无效地址。
IPv6:
Pattern: .*/([0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+(%[a-zA-Z0-9]+)?):([0-9]+)
Java constant: ".*/([0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+(%[a-zA-Z0-9]+)?):([0-9]+)"
处理所有 8 个 16 位部分的 IPv6 地址。 (再次注意,这有效的唯一原因是因为 Java 中的 Inet6Address 实现似乎以非标准方式打印地址 - 可能因此它可以附加端口号并且没有歧义)不检测无效的 IPv6 地址。仅处理小写十六进制字符。使用大写或小写字母和/或数字处理区域/范围 ID(如果存在)。
我用 handy applet I found 测试了它们.
郑重声明,我仍然认为这是个坏主意。 ;-) 我不确定是否所有 Java 平台都会以这种方式打印地址。
关于java - 用于验证 InetSocketAddresses(ipv4/v6 + 端口地址)的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5747548/