用于匹配IPv4和IPv6字符串的Java正则表达式是什么?
时间:2020-03-05 18:48:19 来源:igfitidea点击:
寻找一个要传递给String#matches(String)的字符串,该字符串将匹配IPv4,另一个要匹配IPv6.
解决方案
回答
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的正则表达式。
回答
这是一个匹配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"
回答
处理IP的另一个很好的选择是使用Java的类Inet4Address和Inet6Address,它们可以以多种方式使用,其中一种是确定IP地址的有效性。
我知道这并不能直接回答问题,但是只是值得一提。
回答
正则表达式允许在IPv4部分中使用前导零。
一些Unix和Mac发行版将这些段转换为八进制。
我建议将25 [0-5] | 2 [0-4] \ d | 1 \ d \ d | [1-9]?\ d
用作IPv4段。