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="	";
        System.out.println(str6.matches("	")); //这种不是\的,可以用	,\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)); //[, , , 我我我, , , 爱爱爱, 学学学, 习习习]
原文地址:https://www.cnblogs.com/xuwangqi/p/11190231.html