黑马程序员_正则表达式

 ------- android培训java培训、期待与您交流! ---------- 

正则表达式:用于操作字符串数据的方法

String类中有一个matchesregex)方法,参数为正则表达式。就是一些规则:这些规则用一些符合组成,每个符号都代表特有的含义。都对应着底层的代码,对外提供符号是为了简化操作和书写。

规则通过查API可以学习。

1、常见操作

  1)匹配功能

String类中的matches()方法

如我们要对手机号码进行匹配校验。

private static void checkTel() {

   String str = "15033339440";

   String reg = "1[358]\\d{9}";

   boolean b = str.matches(reg);

   System.out.println(str + ": " + b);

}  

2)切割功能

       String类中的split()方法

private static void splitDemo() {

  

   String str = "abceemengqqweitttjuan";

   String reg = "(.)\\1+";

   String[] arr = str.split(reg);

   for(String s : arr){

     System.out.println(s);

   }

}

 我们用“叠词”来分割字符串。怎么用正则表达式表示呢?

.代表任意字符,用括号括起来表示捕获组,\\1表示匹配第一组,+表示出现相同字符多于一次。就可以表示用叠词分割了。

3) 替换功能

       String类中的replaceAll()方法

private static void replaceAllDemo() {

   //把叠词都提成成单个字符

  

 

  //把手机中间四位用*替代

  String str = "15033339440";

  String s1 = str.replaceAll("(\\d{3})\\d{4}(\\d{4})""$1****$2");

  System.out.println(s1);

}

第一个:我们想要把叠词替换成单个字符。还是用上面讲过的正则表达式方法,后一个参数可以通过$加上数字,来表示引用前一个参数的第几组。

第二个:我们想要把手机中间四位替换成*号,我们也用了组的概念,把前三位,中间四位,后四位分开,前三位和后四位分成两组,保留这两组,中间用*代替,即可以达到预期的效果:150****9440

4)获取功能

    private static void findDemo() {

      String str = "da jia zhu yi le , yao pai wei dian ying le ";

      String reg = "\\b[a-z]{3}\\b";

      //先将正则表达式编译成Pattern对象

      Pattern p = Pattern.compile(reg);

      //通过Pattern对象的matcher方法获取Matcher匹配器对象

      Matcher m = p.matcher(str);

      //find()方法:尝试查找与该模式匹配的输入序列的下一个子序列。

      while(m.find()){

         //group()方法:返回由以前匹配操作所匹配的输入子序列

         System.out.println(m.group());

      }

}

由上例我们可以知道,要将匹配规则的内容获取出来,需要使用正则表达式对象Pattern

步骤是:1)先将正则表达式编译成Pattern对象

        2)通过Pattern对象的matcher方法获取Matcher匹配器对象

        3)通过匹配器对象的方法,将正则规则作用到字符串上以便于操作。

常见方法有:find()尝试查找与该模式匹配的输入序列的下一个子序列。

           group()返回由以前匹配操作所匹配的输入子序列

           start()返回以前匹配的初始索引

           end() 返回最后匹配字符之后的偏移量

 

 

  

;