java 正则表达式

来源:互联网 发布:微信支付接口代码 js 编辑:程序博客网 时间:2024/06/16 15:40

正则表达式API:正则表达式


1.字符类

        字符类(只能匹配一位)        1.匹配简单的 固定的字符          [abC]          ->    只能匹配到 a、b、C          [a-z]          ->    能匹配到a~z        2.匹配简单的 不是固定的某个字符          [^aBc]         ->    能匹配任何字符, 除了a、B、c          [^a-z]         ->    能匹配任何字符, 除了a~z        3.并集 (逻辑加,或)         3.1 [a-zQ-Z]    ->    a~z或者Q~Z = [a-z[Q-Z]]         3.2 [a[m-p]]    ->    a或者m~p   = [am-p]        4.交集 (逻辑乘,与)         4.1[a-e&&[c-f]] ->    a~e并且c~f  = [c-e]         4.2[a-z&&[^bc]] ->    a~z并且不是b或者c  =  [a[d-z]] =[ad-z]         4.3[a-z&&[^b]]  ->    a~z 减去了 b = [a[c-z]]         4.4[a-z&&[^m-p]]->    a~z 减去了 m-p  = [a-lq-z] =[a-l[q-z]]

2.预处理字符类

        预定义字符类(也只能匹配一位)        .                ->    任何字符        \d               ->    数字[0-9]        \D               ->    非数字[^0-9]        \s               ->    空白字符[ \t\n\x0B\f\r]        \S               ->    非空白字符[^\s]        \w               ->    单词字符[a-zA-Z_0-9]        \W               ->    非单词字符[^\w]


3.边界匹配器

        边界匹配器        ^                ->     行的开头        $                ->     行的结尾        \b               ->     单词边界        \B               ->     非单词边界        \A               ->     输入的开头        \G               ->     上一个匹配的结尾        \Z               ->     输入的结尾,仅用于最后的结束符        \z               ->     输入的结尾

4.Greedy 数量词

        Greedy 数量词        X?               ->      X,一次 或者  一次也没有        X*               ->      X,零次 或者 多次        X+               ->      X,一次 或者 多次        X{n}             ->      X,恰好n次        X{n,}            ->      X,至少n次        X{n,m}           ->      X,至少n次,不超过m次


5.组和捕获

        组和捕获        捕获组可以通过从左到右计算其开括号来编号,在表达式 ((A)(B(C))) 中        $1    =((A)(B(C)))        $2    = \A        $3    =(B(C))        $4    =(C)


6.常见操作

        正则表达式对字符串的常见操作        1.匹配               使用String类中的matches方法        2.切割               使用String类中的split方法        3.替换                使用String类中的replaceAll方法        4.获取               1.使用Pattern 将正则表达式封装成对象               2.通过正则对象Matcher获取匹配器对象               3.使用调用模式对匹配器进行匹配操作                 3.1 matches   方法尝试  将整个输入序列    与 该模式匹配                 3.2 lookingAt 方法尝试  将输入序列从头开始 与 该模式匹配                 3.3 find      方法扫描  将输入序列以查找   与 该模式匹配的下一个子序列


举列:

        /*         1.匹配手机号码            规则:第一位必须要1,第二位为3,5,8,第四位到第十一位为任意的数字         */        String tel="13000000000";        String tel_regex="1[358]\\d{9}";        System.out.println(tel+":"+tel.matches(tel_regex));


        /*         2.切割 "."            如果切割" " 出现了多个空格 采用 str.split(" +")        */        String str="神奇的我.神奇的他.神奇的她";        String[] strs=str.split("\\.");        for (String s:strs             ) {            System.out.println(s);        }
        /*            3.如果切割"ttt"或者"pppp" 类似这种叠词 (3个字符及以上)         */        String str2="神奇的我ttt神奇的他pppp神奇的她";        String[] strs2=str2.split("(.)\\1{2,}");        for(String s:strs2)        {            System.out.println(s);        }

        /*           4.将里面abc全部替换成ABC        */        String str4="abclsadabc,sad,abc,sadsad,s,,,a,b,c";        String str4_regex="abc";        String str4_replace="ABC";        String str5;        str5=str4.replaceAll(str4_regex,str4_replace);        System.out.println(str5);


        /*            5.获取3个小写字母组成的单词         */        String str3="ab abc sh,asd,fsas,fdsf, asd  sads a sb";        String str3_regex="\\b[a-z]{3}\\b";        //1.使用Pattern 将正则表达式封装成对象        Pattern p=Pattern.compile(str3_regex);        //2.通过正则对象Matcher获取匹配器对象        Matcher m=p.matcher(str3);        //3.使用调用模式对匹配器进行匹配操作        while(m.find())        System.out.println(m.group());

        /*             6. 对ip地址提取出来排序         */        String ip="192.168.1.101/2.2.2.2, 1192.168.1.1  ... 127.0.0.1 .... 1.1.1.1";        String ip_regex="(\\d{1,3}\\.){3}\\d{1,3}";        TreeSet<String> ips=new TreeSet<String>(new Comparator<String>() {            @Override            public int compare(String o1, String o2) {                //分割                String [] oo1=o1.split("\\.");                String [] oo2=o2.split("\\.");                int i=0;                while((oo1[i].compareTo(oo2[i]))==0) if(i<=2) i++; else break;                Integer ooo1=Integer.parseInt(oo1[i]);                Integer ooo2=Integer.parseInt(oo2[i]);                return ooo1.compareTo(ooo2);            }        });        Pattern p2=Pattern.compile(ip_regex);        Matcher m2=p2.matcher(ip);        while(m2.find())        {            ips.add(m2.group());        }        for(String ipss:ips)        {            System.out.println(ipss);        }


        /*            7.对每个超过3个字母的单词 添加小括号         */        String str6="ab abc sh,asd,fsas,fdsf, asd  sads a sb";        String str7=str6.replaceAll("([a-z]{3,})","($1)");        System.out.println(str7);

/*            8.对电子邮件进行校验         */        String[] malls={"abcd@sina.com.cn","aa@","1232@qq..com","abc@sohu.com","aaa@edu.com"};        String mall_regex="\\w+(\\w\\.)*@\\w+(\\.\\w{2,3}){1,3}";        int i=0;        for(String mall:malls)        System.out.println(mall+": "+mall.matches(mall_regex));


原创粉丝点击