黑马程序员技术交流社区

标题: 知识总结:正则表达式的技巧 [打印本页]

作者: dadai5ai    时间: 2015-7-28 14:17
标题: 知识总结:正则表达式的技巧
范例:现在某个学校的学生成绩要求按照“姓名:年龄:生日:成绩”,那么这样的数据可以出现多条,多条纪录之间使用“|”分隔,例如“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));
    }
}


总结:正则表达式的编写技巧跟对名字差不多,把一个复杂的字符串按照其规律分开多个部分,然后按每一部分的要求编写正则,最后再通过()中括号组合成一起即可。个人觉得正则还是听简单的。

作者: keviner    时间: 2015-7-28 16:31
先分割,在匹配
作者: 木森    时间: 2015-7-28 22:10
总结很详细,很有用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2