作用一:检验字符串是否满足规则

作用二:在一段文本中查找满足要求的内容

java 正则 大小写 不敏感 java正则忽略大小写_正则表达式

 字符类和预定义字符(只能匹配一个字符)

public class Test{
    public static void main(String[] args){
        System.out.println("a".matches("[abc]"));   //判断a是否在abc范围内
        System.out.println("a".matches("[^abc]"));  //判断a是否在除了abc以外的范围内
        //正则表达式是一个字符一个字符判断的
        System.out.println("zz".matches("[^abc]"));         //false
        System.out.println("zz".matches("[^abc][^abc]"));   //true

        //a-z或A-Z(包含头尾的范围)
        System.out.println("a".matches("a-zA-z"));   //判断a是否在a-z或A-Z的范围内
        System.out.println("aa".matches("[a-zA-Z][a-zA-z]"));    //true
        System.out.println("0".matches("[a-zA-Z0-9]"));          //true
        
        System.out.println("a".matches([a-d[m-p]]));       //判断a是否在a-d或m-p范围中
 
        &&(取交集)
        System.out.println("d".matches("[a-z&&[def]]"));//a-z和def取交集,实际上就是def范围内

        //   \是转义字符,改变后面那个字符原本的含义
        System.out.println("\""); //此时\表示转义字符,改变了后面那个双引号原本的含义,使它变成 
                                  //了一个普普通通的双引号而已

        System.out.println("d".matches("."));      //这里的. 表示任意字符,但是只能表示一个字符
        
        System.out.println("3".matches("\\d"));  //因为Java中\是转义字符,所以\d会将d失去意 
                                                 //义,所以我们使用\\d,使第二个\失去意义,也就 
                                                 //是\\d,其实就相当于\d
        System.out.println("_".matches("\\w"));  //     \\w表示[a-zA-Z_0-9]
        System.out.println("你".matches("\\W")); //注意此处的\\W表示除了以上的其他范围
                                                
                                               
    }
}

我们可以将电话号码的要求写在一个字符串中

java 正则 大小写 不敏感 java正则忽略大小写_intellij-idea_02

java 正则 大小写 不敏感 java正则忽略大小写_正则表达式_03

java 正则 大小写 不敏感 java正则忽略大小写_java_04

 严格的身份证号码校验:

java 正则 大小写 不敏感 java正则忽略大小写_正则表达式_05

总结:

java 正则 大小写 不敏感 java正则忽略大小写_正则表达式_06

java 正则 大小写 不敏感 java正则忽略大小写_System_07

java 正则 大小写 不敏感 java正则忽略大小写_java 正则 大小写 不敏感_08

 

replaceAll:

java 正则 大小写 不敏感 java正则忽略大小写_java 正则 大小写 不敏感_09

 

split:

java 正则 大小写 不敏感 java正则忽略大小写_java_10

 

分组:

java 正则 大小写 不敏感 java正则忽略大小写_正则表达式_11

java 正则 大小写 不敏感 java正则忽略大小写_正则表达式_12

 

 

package com.itheima.a08regexdemo;
 
public class RegexDemo12 {
    public static void main(String[] args) {
        //需求1:判断一个字符串的开始字符和结束字符是否一致?只考虑一个字符
        //举例: a123a b456b 17891 &abc& a123b(false)
        // \\组号:表示把第X组的内容再出来用一次
        String regex1 = "(.).+\\1";
        System.out.println("a123a".matches(regex1));
        System.out.println("b456b".matches(regex1));
        System.out.println("17891".matches(regex1));
        System.out.println("&abc&".matches(regex1));
        System.out.println("a123b".matches(regex1));
        System.out.println("--------------------------");
 
 
        //需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符
        //举例: abc123abc b456b 123789123 &!@abc&!@ abc123abd(false)
        String regex2 = "(.+).+\\1";
        System.out.println("abc123abc".matches(regex2));
        System.out.println("b456b".matches(regex2));
        System.out.println("123789123".matches(regex2));
        System.out.println("&!@abc&!@".matches(regex2));
        System.out.println("abc123abd".matches(regex2));
        System.out.println("---------------------");
 
        //需求3:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致
        //举例: aaa123aaa bbb456bbb 111789111 &&abc&&
        //(.):把首字母看做一组
        // \\2:把首字母拿出来再次使用
        // *:作用于\\2,表示后面重复的内容出现日次或多次
        String regex3 = "((.)\\2*).+\\1";
        System.out.println("aaa123aaa".matches(regex3));
        System.out.println("bbb456bbb".matches(regex3));
        System.out.println("111789111".matches(regex3));
        System.out.println("&&abc&&".matches(regex3));
        System.out.println("aaa123aab".matches(regex3));
    }
}

java 正则 大小写 不敏感 java正则忽略大小写_java_13

package com.itheima.a08regexdemo;
 
public class RegexDemo13 {
    public static void main(String[] args) {
        /*需求:
            将字符串:我要学学编编编编程程程程程程替换为:我要学编程
        */
        String str = "我要学学编编编编程程程程程程";
 
        //需求:把重复的内容 替换为 单个的
        //学学                学
        //编编编编            编
        //程程程程程程        程
        //  (.)表示把重复内容的第一个字符看做一组
        //  \\1表示第一字符再次出现
        //  + 至少一次
        //  $1 表示把正则表达式中第一组的内容,再拿出来用
        String result = str.replaceAll("(.)\\1+", "$1");
        System.out.println(result);
 
 
 
    }
}

 

非捕获分组:

java 正则 大小写 不敏感 java正则忽略大小写_正则表达式_14

package com.itheima.a08regexdemo;
 
public class RegexDemo14 {
    public static void main(String[] args) {
        /*
 
        非捕获分组:分组之后不需要再用本组数据,仅仅是把数据括起来。
 
        身份证号码:
        41080119930228457x51080119760902230915040119810705387X130133197204039024430102197606046442
                */
        //身份证号码的简易正则表达式
        //非捕获分组:仅仅是把数据括起来//特点:不占用组号
        //这里\\1报错原因:(?:)就是非捕获分组,此时是不占用组号的。
 
 
        //(?:) (?=) (?!)都是非捕获分组//更多的使用第一个
        //String regex1 ="[1-9]\\d{16}(?:\\d|x|x)\\1";
        String regex2 ="[1-9]\\d{16}(\\d Xx)\\1";
        //^([01]\d|2[0-3]):[0-5]\d:[@-5]\d$
 
        System.out.println("41080119930228457x".matches(regex2));
    }
}

 

java 正则 大小写 不敏感 java正则忽略大小写_java_15