A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

范例:现在某个学校的学生成绩要求按照“姓名:年龄:生日:成绩”,那么这样的数据可以出现多条,多条纪录之间使用“|”分隔,例如“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));
    }
}


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

2 个回复

正序浏览
木森 来自手机 中级黑马 2015-7-28 22:10:51
藤椅
总结很详细,很有用
回复 使用道具 举报
先分割,在匹配
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马