和风细雨

世上本无难事,心以为难,斯乃真难。苟不存一难之见于心,则运用之术自出。

正则表达式进阶

通配符^

^表示模式的开始,如^he匹配所有以he开头的字符串.
例程:
 String[] dataArr = { "he", "hero", "here", "hitler"};

    for (String str : dataArr) {
      String patternStr = "(^he)(\\w*)";

      boolean result = Pattern.matches(patternStr, str);
      if (result) {
        System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
      } else {
        System.out.println("字符串" + str + "匹配模式" + patternStr + "失败");
      }
    }

通配符$

$表示模式的结束,如ia$匹配所有以ia结尾的单词.
 String[] dataArr = { "ia", "Asia", "China", "Colonbia","America"};

    for (String str : dataArr) {
      String patternStr = "(\\w*)(ia$)";

      boolean result = Pattern.matches(patternStr, str);
      if (result) {
        System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
      } else {
        System.out.println("字符串" + str + "匹配模式" + patternStr + "失败");
      }
    }

通配符{}

除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,还可以用{}来指定精确指定出现的次数,X{2,5}表示X最少出现2次,最多出现5次;X{2,}表示X最少出现2次,多则不限;X{5}表示X只精确的出现5次.
例程:
String[] dataArr = { "google", "gooogle", "gooooogle", "goooooogle","ggle"};

for (String str : dataArr) {
 String patternStr = "g(o{2,5})gle";

 boolean result = Pattern.matches(patternStr, str);
 if (result) {
  System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
 } else {
  System.out.println("字符串" + str + "匹配模式" + patternStr + "失败");
 }
}

通配符[]中的-

-表示从..到…,如[a-e]等同于[abcde]
 String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton","Twn"};

    for (String str : dataArr) {
      String regex = "T[a-c]n";

      boolean result = Pattern.matches(regex, str);
      if (result) {
        System.out.println("字符串" + str + "匹配模式" + regex + "成功");
      } else {
        System.out.println("字符串" + str + "匹配模式" + regex + "失败");
      }
    }

Pattern类的方法简述
方法 说明
static Pettern compile(String regex,int flag) 编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE 表示不区分大小写)
Matcher match(CharSequence input) 获取匹配器,input时输入的待处理的字符串
static boolean matches(String regex, CharSequence input) 快速的匹配调用,直接根据输入的模式regex匹配input
String[] split(CharSequence input,int limit) 分隔字符串input,limit参数可以限制分隔的次数

模式类型Pattern.CASE_INSENSITIVE

正则表达式默认都是区分大小写的,使用了Pattern.CASE_INSENSITIVE则不对大小写进行区分.

 String patternStr="ab";
    Pattern pattern=Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
   
    String[] dataArr = { "ab", "Ab", "AB"};
   
    for (String str : dataArr) {
      Matcher matcher=pattern.matcher(str);
     
      if(matcher.find()){
        System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
      }
    }

Pattern的split方法示例

 注意这里要把复杂的模式写在前面,否则简单模式会先匹配上.

String input="职务=GM 薪水=50000 , 姓名=职业经理人 ; 性别=男  年龄=45 ";
    String patternStr="(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";
    Pattern pattern=Pattern.compile(patternStr);
   
    String[] dataArr=pattern.split(input);
   
    for (String str : dataArr) {
      System.out.println(str);
    }

Matcher类的方法简述
方法 说明
boolean matches() 对整个输入字符串进行模式匹配.
boolean lookingAt() 从输入字符串的开始处进行模式匹配
boolean find(int start) 从start处开始匹配模式
int groupCount() 返回匹配后的分组数目
String replaceAll(String replacement) 用给定的replacement全部替代匹配的部分
String repalceFirst(String replacement) 用给定的replacement替代第一次匹配的部分
Matcher appendReplacement(StringBuffer sb,String replacement) 根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后
StringBuffer appendTail(StringBuffer sb) 将输入序列中匹配之后的末尾字串添加到sb当前位置之后.

匹配示例一:XML元素文字解析

String regex="<(\\w+)>(\\w+)</\\1>";
Pattern pattern=Pattern.compile(regex);
   
String input="<name>Bill</name><salary>50000</salary><title>GM</title>";
   
Matcher matcher=pattern.matcher(input);
   
while(matcher.find()){
      System.out.println(matcher.group(2));
}

替换实例一:将单词和数字部分的单词换成大写

    String regex="([a-zA-Z]+[0-9]+)";  
    Pattern pattern=Pattern.compile(regex);
   
    String input="age45 salary500000 50000 title";
   
    Matcher matcher=pattern.matcher(input);
   
    StringBuffer sb=new StringBuffer();
   
    while(matcher.find()){
      String replacement=matcher.group(1).toUpperCase();
      matcher.appendReplacement(sb, replacement);
    }
    matcher.appendTail(sb);
   
    System.out.println("替换完的字串为"+sb.toString());

 

posted on 2008-02-21 20:20 和风细雨 阅读(539) 评论(0)  编辑  收藏 所属分类: 正则表达式


只有注册用户登录后才能发表评论。


网站导航: