判断 IP地址 的正则表达式
关键字:IP地址正则表达式 IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用英文句点“.”隔开。例如:某台计算机IP地址为10.11.44.100。 分析IP地址的组成特点:250-255、200-249、0-199。 于是0-99的正则表达式可以合写为[1-9]?d,那么0-199用正则表达式就可以写成(1d{2})|([1-9]?d),这样0~255的正则表达式就可以写成(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))) ((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d)))) 与大家互动一下: 1. 为什么三位数的匹配放在二位数/一位数的前面?因为正则表达式规则之一:最先开始的匹配拥有最高的优先权。 我使用的正则表达式验证工具,The Regulator下载地址:http://sourceforge.net/projects/regulator/ packageakka; importjava.util.regex.*; publicclassTest{ publicbooleanisIP(Stringaddr){ if(addr.length()<7||addr.length()>15||"".equals(addr)){ returnfalse; } Stringrexp="((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))))"; //returnaddr.matches(rexp); Patternpat=Pattern.compile(rexp); Matchermat=pat.matcher(addr); booleanipAddress=mat.matches(); returnipAddress; } publicbooleanisIPB(Stringaddr){ Stringrexp="((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))))"; returnaddr.matches(rexp); } publicstaticvoidmain(String[]args){ Testtest=newTest(); System.out.println(test.isIP("999.0.0.1")); System.out.println(test.isIP("0.0.0.0")); System.out.println(); System.out.println(test.isIPB("999.0.0.1")); System.out.println(test.isIPB("0.0.0.0")); } } /**output: false true false true **/ importjava.util.regex.* //groovy2.3.7java1.8 defbooleanisIPAddr(Stringaddr){ returnaddr==~/((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))))/ } /**out: false true true true */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |