尝试在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平台都会以这种方式打印地址.