范例:现在某个学校的学生成绩要求按照“姓名:年龄:生日:成绩”,那么这样的数据可以出现多条,多条纪录之间使用“|”分隔,例如“SMITH:20:1990-09-15:90.9|ALLEN:19:1991-11-11:89.6|TONY:21:1989-07-28:100”。 那么下面首先要进行问题的拆分,因为这个验证之中包含有许多的小规则: · 规则一:验证姓名,不设置长度限制(一位或多位,使用+表示); package cn.mldn.demo; public class TestDemo { public static void main(String[] args) throws Exception { String str = "SMITH" ; String regex = "[a-zA-Z]+" ; System.out.println(str.matches(regex)); } } |
· 规则二:验证年龄,年龄是一个数字,长度范围1 ~ 3位; package cn.mldn.demo; public class TestDemo { public static void main(String[] args) throws Exception { String str = "19" ; String regex = "\\d{1,3}" ; System.out.println(str.matches(regex)); } } |
· 规则三:验证生日,生日是数字组合 package cn.mldn.demo; public class TestDemo { public static void main(String[] args) throws Exception { String str = "1998-08-01" ; String regex = "\\d{4}-\\d{2}-\\d{2}" ; System.out.println(str.matches(regex)); } } |
· 规则四:验证小数,成绩最多3位,小数位最多2位。 package cn.mldn.demo; public class TestDemo { public static void main(String[] args) throws Exception { String str = "98.12" ; String regex = "\\d{1,3}(\\.\\d{1,2})?" ; System.out.println(str.matches(regex)); } } |
· 组合验证规则: package cn.mldn.demo; public class TestDemo { public static void main(String[] args) throws Exception { String str = "SMITH:20:1990-09-15:90.9" ; String regex= "[a-zA-Z]+:\\d{1,3}:\\d{4}-\\d{2}-\\d{2}:\\d{1,3}(\\.\\d{1,2})?" ; System.out.println(str.matches(regex)); } } |
· 满足于多组信息的操作; package cn.mldn.demo; public class TestDemo { public static void main(String[] args) throws Exception { String str = "SMITH:20:1990-09-15:90.9|ALLEN:19:1991-11-11:89.6|TONY:21:1989-07-28:100" ; String regex = "([a-zA-Z]+:\\d{1,3}:" + "\\d{4}-\\d{2}-\\d{2}:" + "\\d{1,3}(\\.\\d{1,2})?\\|?)+" ; System.out.println(str.matches(regex)); } } |
总结:正则表达式的编写技巧跟对名字差不多,把一个复杂的字符串按照其规律分开多个部分,然后按每一部分的要求编写正则,最后再通过()中括号组合成一起即可。个人觉得正则还是听简单的。
|