7

IPv4 に一致する String#matches(String) に渡す文字列と、IPv6 に一致する別の文字列を探します。

4

6 に答える 6

18
public static final String IPV4_REGEX = "\\A(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_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 アドレス タイプに対して単一の正規表現を考え出すことができるはずです。実際、IPv4 と IPv6 の両方に一致する単一の正規表現を使用できると思います。

于 2008-09-05T16:13:04.330 に答える
6

IPを処理するためのもう1つの優れたオプションは、JavaのクラスInet4AddressおよびInet6Addressを使用することです。これらは、IPアドレスの有効性を判断するなど、さまざまな方法で役立ちます。

私はこれが質問に直接答えないことを知っていますが、言及する価値があると思っただけです。

于 2009-07-31T06:30:58.277 に答える
3

IPv4 アドレスに一致する正規表現は次のとおりです。

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

Java で文字列リテラルとして指定する場合は、バックスラッシュをエスケープする必要があります。

"\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"
于 2008-09-05T16:13:30.053 に答える
0

正規表現では、IPv4部分で先行ゼロを使用できます。

一部のUnixおよびMacディストリビューションは、これらのセグメントを8進数に変換します。

25[0-5]|2[0-4]\d|1\d\d|[1-9]?\dIPv4セグメントとして使用することをお勧めします。

于 2009-10-15T15:13:40.417 に答える
0

ipv4 が埋め込まれたアドレスと圧縮されたアドレスを考慮すると、ipv6 の正規表現は非常に扱いにくくなります。

オープンソースの IPAddress Java ライブラリは、IPv6 および IPv4 のすべての標準表現を検証し、プレフィックス長 (およびそのような検証) もサポートします。免責事項: 私はそのライブラリのプロジェクト マネージャーです。

コード例:

try {
    IPAddressString str = new IPAddressString("::1");
    IPAddress addr = str.toAddress();
} catch(AddressStringException e) {
    //e.getMessage has validation error
}
于 2017-03-05T07:08:04.443 に答える