Java CIDR表示法和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])\\." +

我有一个验证正常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])\\." +
                    "([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
)。试着去理解正则表达式,而不是仅仅从任何地方复制/粘贴它们。