• 正则表达式-java


    1.用正则表达式心里得有两个东西的概念。第一是字符串(String),即正则表示式合作的对象。第二,正则,即需要根据规则,写一个符合条件的正则。

    2.查看API

       

    3.字符类(Character classes)

    (1)[ab] :有两个条件,第一是字符串中有满足a或b的字符,第二是字符串只能是一个字符

    String regex="[abc]";
            String  a="a";
            String a1="b";
            String  a2="abc";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
        //    true true false

    (2)[^ab]:有两个条件,第一是含有除了a,b之外的字符,第二是字符串只能是一个字符

    String regex="[^abc]";
            String  a="dd";
            String a1="d";
            String  a2="b";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true false 

    (3)[A-Z]:有两个条件,第一是字符串只能是一个字符,第二是大写字母A-Z中的一个

    String regex="[A-Z]";
            String  a="GG";
            String a1="D";
            String  a2="3";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true false 

    [a-z]:有两个条件,第一是字符串只能是一个字符,第二是小写字母a-z中的一个

    String regex="[a-z]";
            String  a="dd";
            String a1="d";
            String  a2="A";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true false 

    String regex="[a-zA-Z]";
            String  a="a";
            String a1="D";
            String  a2="A";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true true 
    String regex="[A-Za-z]";
            String  a="a";
            String a1="D";
            String  a2="A";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true true
    String regex="[A-z]";
            String  a="a";
            String a1="D";
            String  a2="A";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true true 
        String regex="[a-f]";
            String  a="a";
            String a1="B";
            String  a2="g";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true false false
    String regex="[a-fh-m]";
            String  a="a";
            String a1="l";
            String  a2="g";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true false
    String regex="[a-fk]";
            String  a="a";
            String a1="l";
            String  a2="k";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true false true 

    (4)[A-Z[a-z]]:第一总的输出结果还是只能是一个字符,第二该字符串可以是A-Z或者a-z的任意一个字符

    String regex="[a-f[h-m]]";
            String  a="a";
            String a1="l";
            String  a2="g";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true false 

    (5)[ab&&b]:第一是字符串只能是一个字符,第二该结果是&&两边的交集。

        String regex="[acb&&bc]";
            String  a="a";
            String a1="b";
            String  a2="c";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true true 

    这个复杂的问题可以画数轴线来判断

    4.Predefined character classes(预定义字符类)

    (1).(点):第一,表示任意字符,不是字面上的点(这样就不能用来判读只能有点的字符串了)(但是在[]里面点就只是字面量了)

    第二,一个点表示一个字符。如果有两个点,那么字符串必须是两个

    String regex=".";
            String  a=".";
            String a1="b";
            String  a2="c";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true true 
        String regex="[.d]";
            String  a=".";
            String a1="d";
            String  a2="c";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true false 
        String regex="..";
            String  a=".";
            String a1="dd";
            String  a2="c";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true false 

    (2).:表示符合.的字符串(在这里只是一个字符的存在,但是在字符串里是作为转义字符,我们需要的不是转义字符,所以写的时候需要两个\)

    String regex="\.";
            String  a=".";
            String a1="dd";
            String  a2="c";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true false false 

    (3)d:跟[0-9]相同

    String regex="\d";
            String  a="10";
            String a1="4";
            String  a2="c";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true false 

    (4)D:跟[^0-9]相同(注意也只能是一个字符)

    String regex="\D";
            String  a="10";
            String a1="4";
            String  a2="c";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false false true 

    (5)s:表示一个字符;表示一个空字符;tab也是一个空白字符

        String regex="\s";
            String  a="";
            String a1=" ";
            String  a2="    ";//tab
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true true 

    (6)S:跟[^s]等价

    String regex="\S";
    String a="s";
    String a1=" ";
    String a2="2";
    System.out.print(a.matches(regex)+" ");
    System.out.print(a1.matches(regex)+" ");
    System.out.print(a2.matches(regex)+" ");
    //true false true

    (7)w:等价于[a-zA-Z_0-9]

        String regex="\w";
            String  a="d";
            String a1="_";
            String  a2="2";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true true 
            

    (8)W:[^w]

            String regex="\W";
            String  a="d";
            String a1="_";
            String  a2="*";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true true 

    5.Greedy quantifiers(数量词)

    (1)?:表示满足条件或者字符串为空

    String regex="[ab]?";
            String  a="";
            String a1="a";
            String  a2="d";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true false 

    (2)*:表示没有也可以,有也可以,有多个也可以

    String regex="[ab]*";
            String  a="";
            String a1="aa";
            String  a2="d";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true false 

    (3)+:一次或多次

        String regex="[ab]+";
            String  a="";
            String a1="aa";
            String  a2="d";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true false

    (4){n}:就规定有n次(出现的字符只要满足要求,不规定必须出现的是同一个字符)

            String regex="[ab]{3}";
            String  a="abb";
            String a1="aaa";
            String  a2="aaab";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true false 

    (5){n,}:至少n次

    String regex="[ab]{3,}";
            String  a="abb";
            String a1="aaa";
            String  a2="aaab";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //true true true 

    (6){m,n}:包含m,n在内的次数范围

        String regex="[ab]{3,4}";
            String  a="ab";
            String a1="aaa";
            String  a2="aaab";
            System.out.print(a.matches(regex)+" ");
            System.out.print(a1.matches(regex)+" ");
            System.out.print(a2.matches(regex)+" ");
            //false true true 

    6.拆分字符串

    (1)根据空字符串拆分字符串

    String a="my name is sun";
            String [] arr=a.split(" ");
            for(int i=0;i<arr.length;i++) {
                System.out.println(arr[i]);
    
            }
    /*
    my
    name
    is
    sun
    */

    (2)根据点来拆分

    String a="my.name.is.sun";
            
            String [] arr=a.split("\.");
            for(int i=0;i<arr.length;i++) {
                System.out.println(arr[i]);
            }
              /*
               * my
                name
                is
                 sun
               */
    String a="my.name.is.sun";
            
            String [] arr=a.split(".");
            for(int i=0;i<arr.length;i++) {
                System.out.println(arr[i]);
            }      //表示里面的每一个字符都被消去,所以最后是什么都没有

    7.排序字符串(需要将字符串切割成数组才能排序)

    String a="12 45 56 78 5 8 10";
            String b[]=a.split(" ");
            int arr[] =new int[b.length];
            for(int i=0;i<arr.length;i++) {
                arr[i]=Integer.parseInt(b[i]);
            }
            Arrays.sort(arr);
             String atr="";
             for(int i=0;i<arr.length;i++) {
                 if(i==arr.length-1)
                     atr=atr+arr[i];
                 else atr=atr+arr[i]+" ";
             }
             System.out.println(atr);
             //5 8 10 12 45 56 78

    8.替换功能

    String s="ef43vft65";
            String m=s.replaceAll("\d", "");
            System.out.println(m);
    
    //efvft

    9.组(分组就是针对重复的字符的解决办法)(就是一个字符同时出现多少次的方法,上面都没提到)

    String regex="(...)\1";
            String a="&*(&*(";
            
            System.out.println(a.matches(regex));
    String regex="(.)\1+";
            String a="asssdfflgggm";
            String[] b=a.split(regex);
            for(int i=0;i<b.length;i++)
            System.out.println(b[i]);
    
    /*
    a
    d
    l
    m
    */
    String regex="\.";
            String a="m...m..yy..nnaa..mme..iiiss.sun.";
            String m=a.replaceAll(regex,"").replaceAll("(.)\1+", "$1");
            System.out.println(m);
    //mynameisun

    出现几个点本来就要出现几个字符,然后用括号标志起来就成为一个整体,看作一个字符,不能拆分,然后后面说重复一次,字符个数就翻一倍,而且前后两组都应该相同。

     10.在一个字符串里获取我们需要的一定规则的字符串(也就是我们的正则的对象是在一个字符串里面,不是整个字符串)

    String regex="(..)\1+";
            Pattern p=Pattern.compile(regex);
            
            Matcher m=p.matcher("每天我都是欢喜欢喜的,我很开心");
            m.find();        
            System.out.println(m.group());
        //欢喜欢喜
  • 相关阅读:
    【软件工程】 第1次团队作业
    Daily scrum 2015.10.19
    Buaaclubs的NABC与发布
    团队作业2
    团队介绍——窝窝头
    [Alpha阶段]第四次Scrum Meeting
    [Alpha阶段]第三次Scrum Meeting
    [Alpha阶段]第二次Scrum Meeting
    [Alpha阶段]第一次Scrum Meeting
    团队贡献分分配规则
  • 原文地址:https://www.cnblogs.com/S-Mustard/p/7602542.html
Copyright © 2020-2023  润新知