5String的正则表达式

正则表达式(Pattern类):

提供大量的用于匹配字符串的规则以及语法

java.util.regex 工具包下

1.

        String str="abc";//待匹配的字符串
        //1.指定匹配规则
        Pattern p=Pattern.compile("abc");//匹配只有abc的字符串
        //2.关联待匹配的字符串 --输入要匹配的字符串
        Matcher m=p.matcher(str);
        //3.进行匹配
        System.out.println(m.matches());

2.

    String str="abc";//待匹配的字符串
    System.out.println(str.matches("abc"));

正则规则:

[] 里面内容任取一个[abc],也可以表示范围,任取一个[0-9]

+ 去控制前面的字符出现的次数,最少出现一次

?去控制前面的字符出现的次数 ,最多出现一次

*去控制前面的字符出现的次数 可以不出现也可以出现多次

字符{数值} -----表明字符串只出现了字符的数值于出现的次数,很精确的那种

{n,m} 出现的次数是n到m范围之内

{n,}出现的次数连续的最小是n次  {,n}这个是不行的,可能会有负数

()捕获组 \\n就是捕获组的编号 

System.out.println(str.matches(".*(ab).*\\1.*"));

捕获组的编号---从( 就开始编号   

(a(c(d)e)b)f(g)

编号

1         a(c(d)e)b

2          c(d)e

3            d

4             g

    String str="chk";
        //匹配abc/cfh/lkn 每一组任取一个组成的字符串
        System.out.println(str.matches("[abc][cfh][lkn]"));//true
        //匹配除x/u/k之外的字符串 ,[] 里面的内容任取一个  表示范围,任取一个 
        System.out.println(str.matches("[^xuk]"));//true
        //\d表示的是任意的数字,但是字符串要转义一次,所以是\\d,字符串转义好给正则就是\d
        String str2="1";
        System.out.println(str2.matches("\\d"));
        //. 任意字符
        String str3="i";
        System.out.println(str3.matches("."));

        //匹配点 \\. 字符串转义后\. 正则转义后.
        String str4=".";
        System.out.println(str4.matches("\\."));

        //匹配\      \\\\-字符串转义 \\\ 正则表达式转义\\ 这个字符串自身的转义\
        String str5="\\";
        System.out.println(str5.matches("\\\\"));
        //匹配/t
        String str6="\t";
        System.out.println(str6.matches("\t")); //这种不是\\的,可以用\t,\\t,\\\t匹配
        //Demo 1 匹配开头是数字,结尾是小写英文字母,最少3个字符组成的字符串
        System.out.println(str6.matches("[0-9].+[a-z]")); 
        //Demo2 匹配小写英文字母开头,数字结尾,最多3个字符组成的字符
        System.out.println(str6.matches("[a-z].?\\d")); 
        //Demo3 匹配以abc中任意一个开头,以数字结尾的字符串
        System.out.println(str6.matches("[abc].*\\d")); 
        //Demo4 匹配aaaaa的字符串
        System.out.println(str6.matches("a{5}"));
        //Demo5 字符最少出现5次 没有最大区间a{,5},会去到负数所以不允许,最小区间是可以的
        System.out.println(str6.matches("a{5,}"));
        //{n,m} 字符出现的次数是n到m范围之内
        System.out.println(str.matches("a{1,5}"));

 7

         String str="a_es24441gab";
         System.out.println(str.replaceAll("\\d", "*"));//a_es*****gab

[]------\\[]   \\[\\]                           [165165]------------- \\[|\\]

        //输出每个字符出现的个数;
         String str="a_es24441gab";
         while(str.length()>0)
         {  
             int length=str.length();
             //获取第一个字符
             char a=str.charAt(0);
             //判断是否是特殊字符,这个需要转义的
             
            str=str.replaceAll(a+"",""); 
             System.out.println(a+" :"+(length-str.length()));

             
         }
    }

捕获组和使用捕获组不在一个表达式中只能用&n去使用其他的捕获组

 String str="TOM441JERRY";
         System.out.println(str.replaceAll("(TOM)(.*)(JERRY)", "$3$2$1"));

 

         String str2="abab";
         String str="我我我爱爱爱学学学习习习";
         System.out.println(str.replaceAll("(.)\\1+(.)\\2+(.)\\3+(.)\\4+", "$1$2$3$4"));//我爱学习
         System.out.println(str.replaceAll("(.)+(.)+(.)+(.)+", "$1$2$3$4"));//学习习习
         System.out.println(str.replaceAll("(.*)\\1+", "$1"));//我爱学习
         System.out.println(str2.matches(".*(ab).*\\1")); //true

叠词好为一组

 

8.splite 

     String str="966我我我244爱爱爱1学学学9习习习899";
         System.out.println(str.replaceAll("(.)\\1*", "$1"));//96我24爱1学9习89
//以匹配到的信息(分隔符)进行分割生成一个字符串数组
         //分隔符在字符串首字符就切出个空串,在后面就切掉了
         //如果前面出现多少个切割符就切除多少个空串,后面的还是全切掉
         //如果切割符在中间出现多次也会切出多个空串
         String[] ss=str.split("\\d");
        System.out.println(Arrays.toString(ss)); //[, , , 我我我, , , 爱爱爱, 学学学, 习习习]

 

posted @ 2019-07-15 17:28  三十六烦恼风x  阅读(170)  评论(0编辑  收藏  举报