Java CIDR表示法和IP范围验证程序模式
我有一个验证正常IP地址的模式,即:Java CIDR表示法和IP范围验证程序模式,java,regex,ip,cidr,Java,Regex,Ip,Cidr,我有一个验证正常IP地址的模式,即: private static final String PATTERN = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
private static final String PATTERN =
"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
以及用于检查输入是否为有效IP地址的验证方法:
private static boolean validate(final String ip){
Pattern pattern = Pattern.compile(PATTERN);
Matcher matcher = pattern.matcher(ip);
return matcher.matches();
}
但是,现在我需要为CIDR(例如84.240.40.0/24)符号和IP范围(例如172.24.105)添加验证,我尝试了许多不同的模式,但没有得到具体的结果。有什么建议吗
Pattern pattern = Pattern.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(\\d|[1-2]\\d|3[0-2]))?$");
Matcher matcher = pattern.matcher("84.240.40.0/24");
if (matcher.find()) {
System.out.println(matcher.group());
}
输出:
84.240.40.0/24
此模式匹配IPv4地址和IPv4 CIDR范围如果要仅匹配范围,则应删除最后一个问号是否尝试过?前几个结果就是你想要的。我已经尝试过了,但是我无法将我的正则表达式用于正常的IP地址检查与CIDR和没有主机名的IP结合起来。你看起来不太努力。上的第二个正则表达式用于IPv4 CIDR范围(例如
192.168.1.20/24
)。试着去理解正则表达式,而不是仅仅从任何地方复制/粘贴它们。