81,122
社区成员




//对于有限数量的匹配,感觉最简单的就是直接全列出来,反而你合并的话不一定会有高效率.
//因为正则的引擎必须去不断的匹配/推翻/重新调整指针再匹配.
public class Test{
public static void main(String[] args){
String[] marks = {
"128.0.0.0",
"192.0.0.0",
"224.0.0.0",
"240.0.0.0",
"248.0.0.0",
"252.0.0.0",
"254.0.0.0",
"255.0.0.0",
"255.128.0.0",
"255.192.0.0",
"255.224.0.0",
"255.240.0.0",
"255.248.0.0",
"255.252.0.0",
"255.254.0.0",
"255.255.0.0",
"255.255.128.0",
"255.255.192.0",
"255.255.224.0",
"255.255.240.0",
"255.255.248.0",
"255.255.252.0",
"255.255.254.0",
"255.255.255.0",
"255.255.255.128",
"255.255.255.192",
"255.255.255.224",
"255.255.255.240",
"255.255.255.248",
"255.255.255.252",
"255.255.255.254",
"255.255.255.255"
};
String regex = getRegex(marks);
System.out.println(regex);
String mark = "255.255.255.255";
testMark(mark,regex);
}
private static void testMark(String mark,String regex){
System.out.println("'" + mark + "' is " + (mark.matches(regex)? "" : " not ") + "valid!");
}
private static String getRegex(String[] marks){
String regex = "^";
for(String mark : marks){
regex += "\\Q" + mark + "\\E|";
}
regex = regex.replaceAll("[|]$","\\$");
return regex;
}
}