Java常用API(3)----正则表达式

一、正则表达式                                                                                                                                              点击此处返回总目录

二、正则表达式的匹配规则

三、正则表达式练习

四、String类中涉及到正则表达式的方法

五、正则表达式方法练习

一、正则表达式的概念

       正则表达式英文是Regular Expression,在代码中常简写为regex。

       正则表达式就是一个字符串。可以用来描述或定义匹配规则,用来匹配一系列符合匹配某个语法规则的字符串。

二、正则表达式的匹配规则

       在Pattern类中有有正则表达式的规则定义,可以参考API文档。常用的正则表达式的语法规则:

 

       字符:x

       含义:代表的是字符x

       例如:匹配规则为 "a",那么需要匹配的字符串内容就是 ”a”

 

       字符:\\

       含义:代表的是反斜线字符'\'

       例如:匹配规则为"\\" 那么需要匹配的字符串内容就是 ”\”

 

       字符:\t

       含义:制表符

       例如:匹配规则为"\t" ,那么对应的效果就是产生一个制表符的空间

 

       字符:\n

       含义:换行符

       例如:匹配规则为"\n",那么对应的效果就是换行,光标在原有位置的下一行

 

       字符:\r

       含义:回车符

       例如:匹配规则为"\r" ,那么对应的效果就是回车后的效果,光标来到下一行行首

 

       字符类:[abc]

       含义:代表的是字符ab c

       例如:匹配规则为"[abc]" ,那么需要匹配的内容就是字符a,或者字符b,或字符c的一个。注意是一个字符。

 

       字符类:[^abc]

       含义:代表的是除了 ab c以外的任何字符

       例如:匹配规则为"[^abc]",那么需要匹配的内容就是不是字符a,或者不是字符b,或不是字符c的任意一个字符

 

       字符类:[a-zA-Z]

       含义:代表的是a z A Z,两头的字母包括在内

       例如:匹配规则为"[a-zA-Z]",那么需要匹配的是一个大写或者小写字母

 

       字符类:[0-9]

       含义:代表的是 09数字,两头的数字包括在内

       例如:匹配规则为"[0-9]",那么需要匹配的是一个数字

 

       字符类:[a-zA-Z_0-9]

       含义:代表的字母或者数字或者下划线(即单词字符)

       例如:匹配规则为" [a-zA-Z_0-9] ",那么需要匹配的是一个字母或者是一个数字或一个下划线

 

       预定义字符类:.

       含义:代表的是任何字符

       例如:匹配规则为" . ",那么需要匹配的是一个任意字符。如果,就想使用 . 的话,使用匹配规则"\\."来实现

 

       预定义字符类:\d

       含义:代表的是 09数字,两头的数字包括在内,相当于[0-9]

       例如:匹配规则为"\d ",那么需要匹配的是一个数字

 

       预定义字符类:\w

       含义:代表的字母或者数字或者下划线(即单词字符),相当于[a-zA-Z_0-9]

       例如:匹配规则为"\w ",,那么需要匹配的是一个字母或者是一个数字或一个下滑线

 

       数量词:X?

       含义:代表的是X出现一次或一次也没有

       例如:匹配规则为"a?",那么需要匹配的内容是一个字符a,或者一个a都没有

 

       数量词:X*

       含义:代表的是X出现零次或多次

       例如:匹配规则为"a*" ,那么需要匹配的内容是多个字符a,或者一个a都没有

 

       数量词:X+

       含义:代表的是X出现一次或多次

       例如:匹配规则为"a+",那么需要匹配的内容是多个字符a,或者一个a

 

       数量词:X{n}

       含义:代表的是X出现恰好 n

       例如:匹配规则为"a{5}",那么需要匹配的内容是5个字符a

 

       数量词:X{n,}

       含义:代表的是X出现至少 n

       例如:匹配规则为"a{5, }",那么需要匹配的内容是最少有5个字符a

 

       数量词:X{n,m}

       含义:代表的是X出现至少 n 次,但是不超过 m

       例如:匹配规则为"a{5,8}",那么需要匹配的内容是有5个字符a 到 8个字符a之间

 

三、正则表达式练习

1.规则:"[0-9]{6,12}"

   该规则需要匹配的内容是:长度为6位到12位的数字。

   如:使用数据"123456789"进行匹配结果为true;

          使用数据"12345"进行匹配结果为false。

 

2.规则:"1[34578][0-9]{9}"

   该规则需要匹配的内容是:11位的手机号码,第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字

   如:使用数据"12345678901"进行匹配结果为false;

          使用数据"13312345678"进行匹配结果为true。

 

3.规则:"a*b"

   该规则需要匹配的内容是:在多个a或零个a后面有个b;b必须为最后一个字符。

   如:使用数据"aaaaab"进行匹配结果为true;

          使用数据"abc"进行匹配结果为false。

四、String类中涉及到正则表达式的方法

1. public boolean matches(String regex)        //判断字符串是否与正则相匹配。【例1】

2. public String[] split(String regex)                //根据给定正则表达式给的匹配拆分此字符串。【例2】

3. public String replaceAll(String regex, String replacement)    //按照正则的规则来替换字符串。

例1:

package regex;

public class Test {
    public static void main(String[] args) {
        System.out.println(checkQQ("012345"));  //false
        System.out.println(checkQQ("12345"));   //true
        
        System.out.println(checkTel("13581111111"));  //true
        System.out.println(checkTel("12345678909"));  //false
    }
    
    /*
     * 检查QQ是否满足规则:
     * 不能以0开头,5-10位,数字
     */
    public static boolean checkQQ(String str){
        boolean b = str.matches("[1-9][0-9]{4,9}");    //也可以写为 "[1-9][\\d]{4,9}"。
        return b;
    }
    
    /*
     * 检查是否满足手机号规则:
     * 第一位是1;第二位为3,4,5,7,8;后面的为0-9;共11位。
     */
    public static boolean checkTel(String str){
        boolean b = str.matches("1[34578][0-9]{9}");
        return b;
    }
}

例2:切割

package Test;

public class Test {
    public static void main(String[] args) {
        String str1 = "34-4-56-67";
        split_1(str1);                                          //34,4,56,67
        String str2  = "1 3 d4   a4   5";
        split_2(str2);                                          //1,3,d4,a4,5
        String str3 = "192.168.0.1";
        split_3(str3);                                          //192,168,0,1
    }
    /*
     * 按照"-"来切割字符串
     */
    public static void split_1(String str){
        String[] s = str.split("-");
        for(int i = 0;i<s.length;i++){
            if(i==s.length-1){
                System.out.println(s[i]);
            }else{
                System.out.print(s[i]+",");   
            }
        }
    }
    /*
     * 按照空格切割字符串
     */
    public static void split_2(String str){
        String[] s = str.split(" +");         //1,3,d4,a4,5   //写‘+’是匹配一个或多个空格。相当于"[ ]+",不是"[ +]"。
        for(int i = 0;i<s.length;i++){
            if(i==s.length-1){
                System.out.println(s[i]);
            }else{
                System.out.print(s[i]+",");   
            }
        }
    }
    /*
     * 切IP地址
     */
    public static void split_3(String str){
        String[] s = str.split("[\\.]");         //只写一个'.',表示匹配任意字符。所以要转义。
        for(int i = 0;i<s.length;i++){
            if(i==s.length-1){
                System.out.println(s[i]);
            }else{
                System.out.print(s[i]+",");   
            }
        }
    }
    
}

例3:

package Test1;

public class Test {
    public static void main(String[] args) {
        String str = "a11dj2d";
        replace_1(str);
        replace_2(str);     
        replace_3(str);
        replace_4(str);
    }
    public static void replace_1(String str){
        String s = str.replaceAll("[1-9]+", "#");         //a#dj#d。
        System.out.println(s);
    }
    public static void replace_2(String str){
        String s = str.replaceAll("[1-9]{1,}", "#");      //a#dj#d。与"[1-9]+"效果一样。
        System.out.println(s);
    }
    public static void replace_3(String str){
        String s = str.replaceAll("[1-9]", "#");           //a##dj#d。
        System.out.println(s);
    }
    
    public static void replace_4(String str){
        String s = str.replaceAll("[1-9+]", "#");         //a##dj#d。这个加号好像没起什么作用。
        System.out.println(s);
    }
    
}    

五 、正则表达式练习

练习1.匹配数字

    匹配正整数:”\\d+”                                         \\d表示数字   +号表示多个。

    匹配正小数:”\\d+\\.\\d+”                                \\d表示数字   \\.表示小数点    后面又接多个数字

    匹配负整数:”-\\d+”                                       -3232

    匹配负小数:”-\\d+\\.\\d+”                              -233.3323

    匹配保留两位小数的正数:”\\d+\\.\\d{2}”         234344.24   

    匹配保留1-3位小数的正数:”\\d+\\.\\d{1,3}”    23445.1

练习2:验证邮箱格式是否正确

package mail;

public class Test {
    public static void main(String[] args) {
        String mail = "[email protected]";       
        checkMail("[email protected]");    //true
        checkMail("@163.com");     //false
        checkMail("[email protected]");   //false
    
        
    }
    /*
     * [email protected]
     * [email protected]
     * [email protected]
     * 规则:
     * ‘@’前面:数字、字母、下划线 ,至少一个字符
     * ‘@’后,‘.’前:数字、字母,至少一个字符,字母需小写
     * ‘.’后面:字母
     */
    public static void checkMail(String mail){
        boolean b = mail.matches("[\\w]+@[0-9a-z]+\\.[a-zA-Z]+");
        System.out.println(b);
    }
    
}

猜你喜欢

转载自blog.csdn.net/pengchengliu/article/details/81636074
今日推荐