Java中正则表达式案例以及关于?!的使用理解

匹配规则:

  1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
  2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
  3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
  4. 在中括号里面和外面含义不同,如在外时,就表示开头,如7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。
  5. .表示匹配任意的字符。
  6. \d表示数字。
  7. \D表示非数字。
  8. \w表示字母、数字、下划线,[a-zA-Z0-9_]。
  9. \W表示不是由字母、数字、下划线组成。
  10. [\u4e00-\u9fa5]匹配汉字
  11. ?: 表示出现0次或1次。
  12. +表示出现1次或多次。
  13. *表示出现0次、1次或多次。
  14. {n}表示出现n次。
  15. {n,m}表示出现n~m次。
  16. {n,}表示出现n次或n次以上。

案例1:
以字母开头,剩下的字符可以是大写字母或者数字或者是小写字母,但是不能全部是字母或者除开头外全是数字

public static void mainx9() {
        System.out.println("请输入一个字符串:");
        Scanner str1 = new Scanner(System.in);
        String r1 = str1.nextLine();
        if (r1.matches("^[a-zA-Z](?![a-z]{6,12}|[0-9]{5,11}|[A-Z]{6,12})[a-zA-Z0-9]{5,11}")){//断言必须在可执行代码之前使用
            System.out.println("正确");
        }else {
            System.out.println("错误");
        }
    }

案例2:
第一个字符为a,第二个字符,b或者是c

public static void mainX8(String[] args) {
       String str1="ab";
       if (str1.matches("^[a][bc]")){//第一个字符为a,第二个字符,b或者是c
           System.out.println("正确");
       }else {
           System.out.println("错误");
       }
    }

案例3:
写出“大家好666”的正则匹配

public static void mainx7() {
        System.out.println("请输入一个字符串:");
        Scanner str1 = new Scanner(System.in);
        String r1 = str1.nextLine();
        if (r1.matches("\\d{0,}\\w{0,}[\u4e00-\u9e00]{0,}大家好666\\d{0,}\\w{0,}[\u4e00-\u9e00]{0,}")){/*不管前面或者后面是什么字符,只要包含“大家好666”执行结果都是正确的*/
            System.out.println("正确");
        }else {
            System.out.println("错误");
        }
    }

案例4:
输入的8-20个字符可以是a-z或者是0-9,但是不能都是字母或者都是数字

public static void mainx6() {
        System.out.println("请输入一个字符串:");
        Scanner str1 = new Scanner(System.in);
        String r1 = str1.nextLine();
        if (r1.matches("(?![a-z]{8,20}|[0-9]{8,20})[a-z0-9]{8,20}")) {/*输入的8-20个字符可以是a-z或者是0-9,但是不能都是字母或者都是数字*/
            System.out.println("正确");
        } else if (r1.matches("(?![A-Z]{8,20}|[0-9]{8,20})[A-Z0-9]{8,20}")){
            System.out.println("正确");
        }else if (r1.matches("(?![A-Z]{8,20}|[a-z]{8,20})[A-Za-z]{8,20}")){
            System.out.println("正确");
        }else {
            System.out.println("错误");
        }
    }

案例5:
a-z的字符最少8个,最多12个

public static void mainx5() {
        System.out.println("请输入一个字符串:");
        Scanner str1 = new Scanner(System.in);
        String r1 = str1.nextLine();
        if (r1.matches("[a-z]{8,12}")) {/*a-z的字符最少8个,最多12个*/
            System.out.println("正确");
        } else {
            System.out.println("错误");
        }
    }

案例6:
输入的字符中至少包含五个小写字母

public static void mainx4() {
        System.out.println("请输入一个字符串:");
        Scanner str1 = new Scanner(System.in);
        String r1 = str1.nextLine();
        if (r1.matches("[a-z]{5,}[\\w\\d[\u4e00-\u9fa5]]{0,}")) {//输入的字符中至少包含五个小写字母
            System.out.println("正确");
        } else {
            System.out.println("错误");
        }
    }

案例7:
5个a-z的字符;

public static void mainx3() {
        System.out.println("请输入一个字符串:");
        Scanner str1 = new Scanner(System.in);
        String r1 = str1.nextLine();
        if (r1.matches("[a-z]{5}")) {/*5个a-z的字符;*/
            System.out.println("正确");
        } else {
            System.out.println("错误");
        }
    }

案例8:
判断是否由3个字母组成,第一个字母范围是a-c,第二个字母范围是e-g,第三个字母范围是x-z

public static void mainx2() {
        System.out.println("请输入一个字符串:");
        Scanner str1 = new Scanner(System.in);
        String r1 = str1.nextLine();
        if (r1.matches("^[a-c]{1}[e-g]{1}[x-z]{1}")) {/*判断是否由3个字母组成,第一个字母范围是a-c,第二个字母范围是e-g,第三个字母范围是x-z*/
            System.out.println("正确");
        } else {
            System.out.println("错误");
        }
    }

案例9:
判断是否是 hellokitty

public static void mainx1() {
        System.out.println("请输入一个字符串:");
        Scanner str1 = new Scanner(System.in);
        String r1 = str1.nextLine();
        if (r1.matches("^hellokitty")) {/*判断是否是 hellokitty*/
            System.out.println("正确");
        } else {
            System.out.println("错误");
        }
    }

在正则表达式中“^”符号在“[]”中使用时可以看做是逻辑运算符非的用法;
两个中括号这样:"[][]"时可以视作并集;
(?![a-z]{6,12}|[0-9]{5,11}|[A-Z]{6,12})[a-zA-Z0-9]{5,11}在这个表达式中使用小括号括起来的部分可以视作一个部分;
在Java中?!的作用相当于排除,?![a-z]{6,12}|[0-9]{6,12}|[A-Z]{6,12}这段代码的意思是说6-12个字符都是大写字母或者都是小写字母,或者是都是数字。

分享结束