Java正则表达式(二)
Matcher类:引用\w(\d\d)(\w+)
这个正则表达式有三个组:Java代码
- package?edu.jlu.fuliang;??
- ??
- import?java.util.regex.Matcher;??
- import?java.util.regex.Pattern;??
- ??
- ??
- public?class?RegexTest?{??
- ????public?static?void?main(String[]?args)?{??
- ????????String?regex?=?"\\w(\\d\\d)(\\w+)";??
- ????????String?candidate?=?"x99SuperJava";??
- ??????????
- ????????Pattern?p?=?Pattern.compile(regex);??
- ????????Matcher?matcher?=?p.matcher(candidate);??
- ????????if(matcher.find()){??
- ????????????int?gc?=?matcher.groupCount();??
- ????????????for(int?i?=?0;?i?<=?gc;?i++)??
- ????????????????System.out.println("group?"?+?i?+?"?:"?+?matcher.group(i));??
- ????????}??
- ????}??
- }??
输出结果:引用group 0
99SuperJavaJava代码
- import?java.util.regex.*;??
- ??
- public?class?MatcherPatternExample{??
- ??public?static?void?main(String?args[]){??
- ??????test();??
- ??}??
- ??
- ??public?static?void?test(){??
- ?????Pattern?p?=?Pattern.compile("\\d");??
- ?????Matcher?m1?=?p.matcher("55");??
- ?????Matcher?m2?=?p.matcher("fdshfdgdfh");??
- ??
- ?????System.out.println(m1.pattern()?==?m2.pattern());??
- ?????//return?true??
- ??}??
- }??
public Matcher reset()Java代码
- public?class?MatcherStartExample{??
- ??public?static?void?main(String?args[]){??
- ??????test();??
- ??}??
- ??public?static?void?test(){??
- ?????//create?a?Matcher?and?use?the?Matcher.start()?method??
- ?????String?candidateString?=?"My?name?is?Bond.?James?Bond.";??
- ?????String?matchHelper[]?=??
- ??????{"??????????^","??????????????????????^"};??
- ?????Pattern?p?=?Pattern.compile("Bond");??
- ?????Matcher?matcher?=?p.matcher(candidateString);??
- ??
- ?????//Find?the?starting?point?of?the?first?'Bond'??
- ??????matcher.find();??
- ??????int?startIndex?=?matcher.start();??
- ??????System.out.println(candidateString);??
- ??????System.out.println(matchHelper[0]?+?startIndex);??
- ??
- ?????//Find?the?starting?point?of?the?second?'Bond'??
- ??????matcher.find();??
- ??????int?nextIndex?=?matcher.start();??
- ??????System.out.println(candidateString);??
- ??????System.out.println(matchHelper[1]?+?nextIndex);??
- }??
输出结果:Java代码
- import?java.util.regex.*;??
- ??
- public?class?MatcherGroupExample{??
- ??public?static?void?main(String?args[]){??
- ??????test();??
- ??}??
- ??public?static?void?test(){??
- ??????//create?a?Pattern??
- ??????Pattern?p?=?Pattern.compile("Bond");??
- ??
- ??????//create?a?Matcher?and?use?the?Matcher.group()?method??
- ??????String?candidateString?=?"My?name?is?Bond.?James?Bond.";??
- ??????Matcher?matcher?=?p.matcher(candidateString);??
- ??????//extract?the?group??
- ??????matcher.find();??
- ??????System.out.println(matcher.group());??
- ??}??
- }??
public String group(int group)Java代码
- import?java.util.regex.*;??
- ??
- public?class?MatcherGroupParamExample{??
- ??public?static?void?main(String?args[]){??
- ??????test();??
- ??}??
- ??public?static?void?test(){??
- ?????//create?a?Pattern??
- ??????Pattern?p?=?Pattern.compile("B(ond)");??
- ??
- ?????//create?a?Matcher?and?use?the?Matcher.group(int)?method??
- ?????String?candidateString?=?"My?name?is?Bond.?James?Bond.";??
- ?????//create?a?helpful?index?for?the?sake?of?output??
- ?????Matcher?matcher?=?p.matcher(candidateString);??
- ?????//Find?group?number?0?of?the?first?find??
- ??????matcher.find();??
- ??????String?group_0?=?matcher.group(0);??
- ??????String?group_1?=?matcher.group(1);??
- ??????System.out.println("Group?0?"?+?group_0);??
- ??????System.out.println("Group?1?"?+?group_1);??
- ??????System.out.println(candidateString);??
- ??
- ?????//Find?group?number?1?of?the?second?find??
- ??????matcher.find();??
- ??????group_0?=?matcher.group(0);??
- ??????group_1?=?matcher.group(1);??
- ??????System.out.println("Group?0?"?+?group_0);??
- ??????System.out.println("Group?1?"?+?group_1);??
- ??????System.out.println(candidateString);??
- ??}??
- }??
public int groupCount()Java代码
- while(matcher.find()){??
- ???//在匹配的区域,使用group,replace等进行查看和替换操作??
- }??
public boolean find(int start)Java代码
- StringBuffer?sb?=?new?StringBuffer();??
- String?replacement?=?"Smith";??
- Pattern?pattern?=?Pattern.compile("Bond");??
- Matcher?matcher?=pattern.matcher("My?name?is?Bond.?James?Bond.?I?would?like?a?martini.");??
- while(matcher.find()){??
- ??matcher.appendReplacement(sb,replacement);//结果是My?name?is?Smith.?James?Smith??
- }??
Matcher对象会维护追加的位置,所以我们才能不断地使用appendReplacement来替换所有的匹配。Java代码
- while(matcher.find()){??
- ??matcher.appendReplacement(sb,replacement);//结果是My?name?is?Smith.?James?Smith??
- }??
- matcher.appendTail(sb);??
的更便捷的方法。Java代码
- public?String?replaceFirst(String?replacement)??
这个与replaceAll想对应很容易理解,就是只替换第一个匹配的。
?
转载自:http://fuliang.iteye.com/blog/175035
?