主要是搞清楚matches()/lookingAt ()/find()這三個方法的區別,以及會使用replaceAll() replaceFirst() appendReplacement() appendTail() ,請看代碼
package test;import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegTest {public static void main(String[] args){Pattern reg = Pattern.compile("(20\\d{2})-([01]\\d)-([0-3]\\d)");Matcher matcher = null;System.out.println(reg.pattern());matcher = reg.matcher("2012-02-25");//matches()方法嘗試對整個目標字元展開匹配檢測,是只有整個目標字串完全符合時才返回真值if (matcher.matches()){System.out.println("time:"+matcher.group(0));System.out.println("year:"+matcher.group(1));System.out.println("year:"+matcher.group(2));System.out.println("year:"+matcher.group(3));}Pattern reg2 = Pattern.compile("\\d*");System.out.println(reg2.pattern());matcher = reg2.matcher("2012abcd");//lookingAt()方法將檢測目標字串是否以匹配的子串起始if (matcher.lookingAt()){System.out.println("num:"+matcher.group());}Pattern reg3 = Pattern.compile("\\d+");System.out.println(reg3.pattern());matcher = reg3.matcher("asf2012abcd2011jdf2010jk");//find()方法嘗試在目標字串裡尋找下一個匹配子串while(matcher.find()){System.out.println("matcherStr:"+matcher.group());}//appendReplacement() 將當前匹配子串替換為指定字串,並且將替換後的子串以及其之前到上次匹配子串之後的字串段添加到一個StringBuffer對象裡Pattern reg4 = Pattern.compile("(hello|goodbye)");matcher = reg4.matcher("sayhelloandsaygoodbyeandsayhelloandsaysomething");StringBuffer sb = new StringBuffer();while (matcher.find()){System.out.println("matcherStr:"+matcher.group());matcher.appendReplacement(sb, "IT");System.out.println("sb:"+sb);}//appendTail() 方法則將最後一次匹配工作後剩餘的字串添加到一個StringBuffer對象裡//可以在一次或多次調用 appendReplacement 方法後調用它來複製剩餘的輸入序列matcher.appendTail(sb);System.out.println("sb:"+sb);}}
輸出結果如下:
(20\d{2})-([01]\d)-([0-3]\d)time:2012-02-25year:2012year:02year:25\d*num:2012\d+matcherStr:2012matcherStr:2011matcherStr:2010matcherStr:hellosb:sayITmatcherStr:goodbyesb:sayITandsayITmatcherStr:hellosb:sayITandsayITandsayITsb:sayITandsayITandsayITandsaysomething