.toString()
これを行うためにの正規表現を使用しようとするのは、InetSocketAddress
それほど良い考えではないかもしれません。(上記の質問に対するコメントを参照してください)
考えられる代替案の1つは、URLまたはURIを使用して、アドレスを文字列形式で出力することです。これは、はるかに標準化されています。
**編集:**
一方、正規表現で自分を拷問したい場合は...;-)
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アドレスを検出しません。小文字の16進文字のみを処理します。ゾーン/スコープID(存在する場合)を大文字または小文字および/または数字で処理します。
見つけた便利なアプレットでテストしました。
そして、記録のために、私はまだそれが悪い考えだと思います。;-)すべてのJavaプラットフォームがこの方法でアドレスを出力するかどうかはわかりません。