黑马程序员技术交流社区

标题: 正则表达式总结 [打印本页]

作者: yaodd321    时间: 2014-11-4 19:27
标题: 正则表达式总结
正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配这些模式的部分,你就能随心所欲的对它们进行处理。其语法是一个难点,但它是一种简洁,动态的语言。正则表达式提供可一种完全通用的方式,能够解决各种字符串处理的相关问题:匹配,切割,替换和获取。
(1)匹配-其实就是String类中的match方法。
  1. package cn.itcast.regex.demo;

  2. public class RegexMatchDemo {

  3.         public static void main(String[] args) {
  4.                 matchDemo();
  5.         }

  6.         public static void matchDemo() {
  7.                 String tel = "15674356738";

  8.                 String regex = "1[358]\\d{9}";

  9.                 System.out.println(tel.matches(regex));
  10.         }

  11. }
复制代码

(2)切割-其实就是String类中的split方法。
  1. package cn.itcast.regex.demo;

  2. public class RegexSplitDemo {

  3.         public static void main(String[] args) {
  4.                 splitDemo();
  5.         }

  6.         public static void splitDemo() {
  7.                 // String str = "zhangsan     lisi                wangwu";
  8.                 String str = "zhangsantttttlisi@@@@@@wangwu";

  9.                 // String regex = " +";
  10.                 //多个重复的字符作为切割点
  11.                 String regex = "(.)\\1+";

  12.                 String[] names = str.split(regex);
  13.                 for (String name : names) {
  14.                         System.out.println(name);
  15.                 }
  16.         }
  17. }
复制代码

(3)替换
正则表达式特别便于替换操作,它提供了很多方法:replaceFirst()以参数字符串替换掉第一个匹配成功的部分。replaceAll()以参数字符串替换所有匹配成功的部分。appendReplacement()执行渐进是替换,而不像是replaceFirst()和replaceAll()那样只替换第一个匹配和全部匹配。
  1. package examples;

  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;

  4. /*
  5. * 替换操作
  6. * 1.replaceFirst()
  7. * 2.replaceAll()
  8. * 3.appendReplacement()
  9. * 4.appendTail()
  10. *
  11. */
  12. public class TheReplacement {
  13.         public static String s = "/*! Here's a     block of text to use as input to the regular exprission matcher."
  14.                         + " Note that we'll first extract the block of text by looking for the special delimiters, "
  15.                         + "then process the extracted block. !*/";

  16.         public static void main(String[] args) {
  17.                 Matcher m = Pattern.compile("/\\*!(.*)!\\*/").matcher(s);
  18.                 // 查找该模式匹配的序列的下一个子序列
  19.                 if (m.find())
  20.                         // 返回由以前匹配操作所匹配的子序列
  21.                         s = m.group(1);
  22.                 // 将存在两个或以上的空格替换为一个空格
  23.                 s = s.replaceAll(" {2,}", " ");

  24.                 // s = s.replaceAll("(?m)^ +" , "");

  25.                 System.out.println(s);

  26.                 s = s.replaceFirst("[aeiou]", "(VOWEL1)");

  27.                 // System.out.println(s);

  28.                 Pattern p = Pattern.compile(" \\w");// 将给定的正则表达式编译到模式中
  29.                 Matcher m1 = p.matcher(s); // 将输入的序列与模式进行匹配,得到一个Matcher对象

  30.                 /*
  31.                  * while(m1.find()) s = m1.replaceAll(m1.group().toUpperCase());
  32.                  * System.out.println(s);
  33.                  */

  34.                 StringBuffer sb = new StringBuffer();
  35.                 // 逐一替换
  36.                 while (m1.find())
  37.                         // 操作用来替换的字符串
  38.                         m1.appendReplacement(sb, m1.group().toUpperCase());
  39.                 m1.appendTail(sb);
  40.                 System.out.println(sb.toString());
  41.         }

  42. }
复制代码

(4)获取-将正则表达式封装成模式对象,然后获取给定对象与此模式的匹配器,调用匹配器的find()方法和group()方法
  1. package examples;

  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;

  4. public class RegexGetDemo {

  5.         public static void main(String[] args) {
  6.                 getDemo();
  7.         }

  8.         public static void getDemo() {

  9.                 String str = "da jia hao,ming tian bu fang jia!";

  10.                 String regex = "\\b[a-z]{3}\\b";

  11.                 // 1.将正则表达式封装成对象,将给定的正则表达式编译到模式中
  12.                 Pattern p = Pattern.compile(regex);
  13.                 // 2.获取匹配给定输入与此模式的匹配器
  14.                 Matcher match = p.matcher(str);

  15.                 boolean b = match.matches();

  16.                 while (match.find()) {// 查找

  17.                         System.out.println(match.group());// 获取子序列
  18.                 }
  19.         }
  20. }
复制代码

作者: wf111sxwf    时间: 2014-11-6 11:32
好啊学习到了
作者: dong53821713    时间: 2014-11-6 11:33
好东西啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2