【原创】正则表达式进阶

Junglesong 发表于 2008-04-05 15:06:24

通配符^

^表示模式的开始,如^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());


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定