正则表达式

Posted George93_部落格

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

1.匹配  

       match(String regex)  ;

1  String tel="18600000111";
2        String reg="1[3578]\\d{9}";  //首字母1,第二字母3,5,7,8,后面都是数字共有9位
3        boolean b1 =tel.matches(reg);
4        System.out.println(b1);//输出结果true

 

2.切割  

       (1)切割一个或多个空格

1  String str ="aaa bbb  ccc ddd    eee";
2          String [] arr =str.split(" +");//“ +”表示至少有一个空格
3          for(String s:arr){
4               System.out.print(s); //输出aaabbbcccdddeee
5         }

 

       (2)通过.来切割字符串

 1 String str2="zhangsan.lisi.wangwu";
 2            /* \\是代表转义字符,如果你直接放split("."),是无法切割的,因为.在正则表达式中.有它特有的含义
 3                当你用转义之后\\.那么它就只代表一个点,而不具有特殊意义*/
 4            String [] arr2 =str2.split("\\.");
 5            for(String s:arr2){
 6                System.out.println(s);
 7            }
 8 
 9 /* 补充:在java中需要转义的除了.外,还有需要先转义不能直接切割的:
10   *     $  ( )  *  +  [ ]   ?    \  ^  { }  |  
11   *     这么几个大家用它来切割的时候,转义后就可以了
12   */

      (3)用重复项来切割

 1 String str3 ="wer#######tayuio****asdfg";
 2            String reg ="(..)"; //(.)代表第一个任意字符    \\1代表回去第一组数据  +代表1个或者多个      
 3            String [] arr3=str3.split(reg);
 4            for(String s:arr3){
 5                System.out.println(s);
 6           }
 7 
 8 /*:(.)的字符视为一个整体。 \\1代表回去第一组数据
 9 14  * 那它其实在这里也就代表(.),所以就相当于(.)(.)+,这里仅仅是相当于,也是为了好理解,其实他们还是有本质区别的
10 15  * 因为(.)==\\1,就是说如果.代表a,那么\\1也就代表a,而(.)≠(.),前面代表a后面可以代表b,因为前后两个点不是同一个点
11 */

 

3.替换  

     (1)把重复的数据 替换为#

1  String str="wer#####yw****fghj"; 
2             //把重复的数据 替换为#    
3             str=str.replaceAll("(.)\\1+", "#");//(.) 第一个任意字符   \\1 取第一组数据   +  1个或者多个
4             System.out.println(str) ;   //输出wer#yw#fghj

     (2)把重复项都变成单个

1 String str="wer#####yw****fg???hj"; 
2      //后一个参数的含义 可以通过$  数字引用第一个参数中的组,这个美元符号代表就是前面小括号里的内容
3                str=str.replaceAll("(.)\\1+", "$1");
4               System.out.println(str);    //输出wer#yw*fg?hj

     (3)电话号码中间几位用*表示

1 String str2="15889895644";//158****5644  
2            str2=str2.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
3            System.out.println(str2);// $1表示符号前面第一个小括号,$2代表第二个,如果有第三个小括号,那也可以$3;   //输出158****5644

 

4.获取

   (1)获取正则表达式所匹配的字符串

 1        String str="da jio zhu yi laa, ming tian  fang jia laa";
 2            //1.定义规则
 3            String reg="\\b[a-z]{3}\\b";//任意三个字符 \\b 是单词的边界(明白为什么加这个)
 4            Pattern p =Pattern.compile(reg);
 5            //3.通过正则表达对象 获取匹配器对象   并把操作的字符串关联
 6            Matcher m =p.matcher(str);
 7            while(m.find()){  //find()用来搜索与正则表达式相匹配的任何目标字符串
 8            System.out.println(m.start()+"....."+m.group()+"..."+m.end());
 9            } //start()开始位置    group()用来返回包含了所匹配文本的字符串     end()结束位置
10            }
11     }
12  /* 有关: 在regex(正则表达式)包中,包括了两个类,Pattern(模式类)和Matcher(匹配器类)。
13     //输出3.....jio...6
14 7.....zhu...10
15 14.....laa...17
16 35.....jia...38
17 39.....laa...42

 

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式