import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
/**
* String常用的3個正則表達式函數
*/
System.out.println("abc0".matches("abc"));
System.out.println("a0000bc".replaceAll("\\d", "*"));
System.out.println("a0000bc".replaceFirst("\\d", "*"));
String s = "a0000bc";
System.out.println(s.replaceFirst("\\d", "_"));//replaceFirst原串是不變的返回一個新串
System.out.println("s:"+s);
Pattern p = Pattern.compile("[a-z]{3}");
Matcher m = p.matcher("fgh");
// matches()匹配整個字元串
System.out.println(m.matches());//等價於"fgh".matches("[a-z]{3}");
Matcher ma = Pattern.compile("\\d{3,5}").matcher("123-345345-234-00");
System.out.println(ma.matches());//有過一次匹配游標就不是從頭開始了。
ma.reset();//所以要reset
System.out.println(ma.find());//返回boolean類型
System.out.println(ma.start()+"->"+ma.end());//找到才能調用方法
//不然會報異常錯誤
//>=start && <=end
System.out.println(ma.find());
System.out.println(ma.find());
System.out.println(ma.find());
//沒有reset()結果會不一樣
//每次都是從頭開始找的
System.out.println(ma.lookingAt());
System.out.println(ma.lookingAt());
System.out.println(ma.lookingAt());
System.out.println(ma.lookingAt());
/**
* 奇偶分別替換成大寫和小寫
*/
Matcher m1 = Pattern.compile("java", Pattern.CASE_INSENSITIVE)
.matcher("java JaVa JAva ILoveJavA youhateJAVA adsf");
StringBuffer sb = new StringBuffer();
int i = -1;
while(m1.find()){
i++;
if(i%2==0){
m1.appendReplacement(sb, "java");
//將找到的串替換後加上之前不是的串都放在sb裡面
//所以第四個列印為 java JAVA java ILoveJAVA
System.out.println("|"+sb+"|");
}else{
m1.appendReplacement(sb, "JAVA");
System.out.println("|"+sb+"|");
}
}
m1.appendTail(sb);
System.out.println("|"+sb+"|");
Matcher m2 = Pattern.compile("(\\d{3,5})([a-z]{2})")
.matcher("123aa-23433bb-234cc-00");
while(m2.find()){
System.out.println(m2.group());
System.out.println(m2.group(1));
System.out.println(m2.group(2));
}
}
/**
* 總結下,常用的就是
* Matcher m = Pattern.compile(regExp).Matcher(string);
* while(m.find()){
* m.group();
* m.group(index);//如果有分組
* m.start();//start匹配開始得到的下標
* m.end();//end為匹配得到的後一個下標
* }
*
* 其他方法: m.reset()//復原游標
* m.lookingAt()//永遠找第一個無視游標
* m.matches() //是否匹配,等價於String的matches(regExp)
* m.appendReplacement(stringBuffer,newString);//直到找到匹配的替換後一起放入stringBuffer
* m.appendTail();//appendReplacement最後可能剩餘沒有的串
*
* String類用到的: replaceAll(regExp,newString)
* replaceFirst(regExp,newString)
* matches(regExp)
*
* 至於正則模式的寫法,和JS的正則一模一樣:
* (?=a) ?!a
*/
}