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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Dreamhui 于 2018-8-29 12:44 编辑

基础班还没毕业,脸皮厚一点也发个技术贴,奉上自己的Java学习笔记一篇——正则表达式:

1. 正则支持在java1.4版本正式引入,API中java.util.regex包下提供了2个类用
于对正则的支持,分别为:Matcher类、Pattern类(构造方法私有化)。其中Pattern类用于编译正则,Matcher类提供了许多用于匹配正则标记的方法,Matcher类对象可由Pattern类的成员方法取得。开发过程中,除非遇到相当复杂的正则验证,否则很少直接使用这两个类。
2. 关于正则,最为重要的是String类对其的支持,String类中支持正则的方法有:
public  boolean  matches (String regex)
public  String  replaceAll (String regex, String replacement)
public  String  replaceFirst(String regex, String replacement)
public  String[]  split(String regex)
public  String[]  split(String regex, int limit)
3. Pattern类中的常用正则标记(熟记并熟练使用):
3.1 单个字符(数量为1):
—”单个字符”:判断用于匹配的是否为一个该字符,是则返回true,不是则返回false
范例:
public class RegexTest {
    public static void main(String[] args) {
        String str = "a";
        String regex = "x";
        System.out.println(str.matches(regex));
    }
}
输出结果为false;(仅当regex = “a”时结果为true)
3.2 字符集(数量为1):
—[abc]:是a、b、c中的某一个;
—[^abc]:^表示取反,即不是a、b、c中的某一个;
—[a-zA-Z] :表示为一个字母(不区分大小写);
—[0-9]:表示为0-9的某一数字
—[a-zA-Z0-9]:表示为字母或数字
—[a-d[m-p]] :表示为a-d或m-p的某一字母,可写为[a-dm-p];
—[a-z&&[def]] :表示为d、e、或f;
—[a-z&&[^bc]] :a-z排除b和c
—[a-z&&[^m-p]] :同上
3.3 字符集的简写形式:(数量为1)
— .  :Any character (may or may not match line terminators) 表示字符
— \d :A digit: [0-9]  
—\D  :A non-digit: [^0-9]
—\s   :A whitespace character: [ \tundefined\x0B\f\r] 空字符
—\S  :A non-whitespace character: [^\s]  非空字符
—\w  :A word character: [a-zA-Z_0-9]   字母、数字、或下划线
—\W  :A non-word character: [^\w]   对上取反
3.4 正则标记的数量判断:
—X?  :X, once or not at all (X出现一次或者不出现)
—X*  :X, zero or more times (X出现0次或者多次)
—X+  :X, one or more times (X至少出现1次)
—X{n}  :X, exactly n times (X出现n次)
—X{n,}  :X, at least n times (X至少出现n次)
—X{n,m}  :X, at least n but not more than m times (X出现n~m次,包括n、m)
注意:其中“X”可表示单个字符或一个正则表达式:”a+” --- ”a”至少出现1次;”[a-zA-Z]{1,8}”---表示字母出现1-8次。
3.5 正则表达式的逻辑组合:
—XY  :X followed by Y (X出现后紧跟着出现Y)
—X|Y  :Either X or Y (X出现或者Y出现)
—(X)  :X, as a capturing group (X作为一个整体同时出现)
注意:其中,“X”和“Y”均可表示单个字符或者一个正则表达式:"[a-zA-Z]+@\\w+\\.(com|cn)"表示由“字母@ 字母、数字、下划线 . com”或“字母@ 字母、数字、下划线 . cn”组成;
范例如下:
public class RegexTest {
    public static void main(String[] args) {
        String str = "hello@123_a.com";
        String regex = "[a-zA-Z]+@\\w+\\.(com|cn)";
        System.out.println(str.matches(regex));
    }
}
输出结果为true。

*******正则的使用关键在于有效的组合!*******



        在使用正则组合进行复杂验证时,要十分注意正则表达式的逻辑顺序,灵活运用逻辑关系,做到正确而优雅(简单明了、布局合理)。
        注意事项:编写正则表达式时,要小心转义字符,单个“\”表示转义,“\\”表示一个“\”,如:“\d”应写为“\\d”、“.”应写为“\\.”。
综合范例:
public class RegexTest {
    public static void main(String[] args) {
        /*
         * 验证电话号码
         * */
        String str = "010-57171490";
        String regex = "(\\(\\d{3}\\)-|\\d{3}-)?\\d{7,8}";
        System.out.println(str.matches(regex));

        /*
         * 单个字符的数量组合
         * */
        System.out.println("========================");
        String str1 = "aaaa";
        String regex1 = "a{4}";
        System.out.println(str1.matches(regex1));


        /*
         * 邮箱的验证:abc123_a123d  . ass123  @  qqmail  .  com
         * 要求:
         * 1.第一部分由字母、数字、下划线组成,且必须以字母开头,以字母或数字结尾,长度不超过30
         * 2.第二部分由字母、数字组成,长度不超过10
         * 3.第三部分以小写字母组成,长度不超过6
         * 4.以com、cn、com.cn、avg或edu结尾
         *
         * */
        System.out.println("========================");
        String str2 = "a1231_asd.01gmh12@qqmail.avg";
        String regex2 = "[a-zA-Z]\\w{1,28}[a-zA-Z0-9]\\.[a-zA-Z0-9]{1,10}@[a-z]{1,6}\\.(com|cn|com.cn|avg|edu)";
        System.out.println(str2.matches(regex2));
    }
}

[tr][/tr][/table]

[table]




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马