import java.util.regex.Pattern;
public static void main(String[] args) {
String replacement = "*";
// /d的用法,匹配數字
replaceAll("023-31313000", "^\\d{3}-\\d{8}$", replacement);
// /w的用法,匹配字母、漢字、數字 ^$ 用於正則表達式的開始和結束, 如 ^\d$ 匹配"aaaa"會失敗,而 ^\d{4}$ 匹配會成功、
replaceAll("table11","^\\b\\w{5}\\d{2}\\b$","?");
//{m,n} mi出現最小次數,n出現最大的次數
System.out.println("table11".replaceAll("\\d{1,2}", "*"));
System.out.println("023-31313000".replaceAll("\\d", "*"));
//? + * 都是表示 重複次數,*0或者0次以上 ,+ 1次或者1次以上,*次或0次以上 0次的情況下
System.out.println("111111111");
System.out.println("a".replaceAll("\\d?","A" ));
System.out.println("11##11".replaceAll("\\d?", replacement));
System.out.println("0".replaceAll("\\(", replacement));
replaceAll("(023)023","(\\(?\\d{3}\\)?\\d{3})|(\\(?\\d{4}\\)?\\d{4})","*");
replaceAll("(0234)0234","(\\(?\\d{3}\\)?\\d{3})|(\\(?\\d{4}\\)?\\d{4})|(\\(?\\d{5}\\)?\\d{5})","*");
replaceAll("1","(\\(?\\d{3}\\)?\\d{3})|(\\(?\\d{4}\\)?\\d{4})|\\d","*");
System.out.println("(023)(023)".replaceAll("(\\(?\\d{2,3}\\)?){2,3}", replacement));
System.out.println("(023)(023)(023)".replaceAll("(\\(?\\d{2,3}\\)?){2,3}", replacement));
// \\1的用法爲後
System.out.println("(023)(023)(023)".replaceAll("(\\(?\\d{2,3}\\)?)\\1\\1", replacement));
String c ="a";
System.out.println(c.replaceAll("\\d*","A" ));
System.out.println(c.replaceAll("\\w*","A" ));
//零寬度斷言 只找出位置,
//零寬度正預測先行斷言(?=exp) 會去匹配 出現exp的位置,向字符串前 如匹配 seeing,會出現see*ing ,說明不包含ing本身,只找出ing這個位置
//零寬度正回顧後發斷言(<?=exp) 會去匹配 出現exp的位置,向字符串後 如匹配 seeing,會出現seeing* ,說明不包含ing本身,只找出ing這個位置
System.out.println("i am daning and seeing".replaceAll("(?=ing)\\w", replacement));
System.out.println("i am daning1 and seeing1".replaceAll("\\w(?<=ing)", replacement));
System.out.println("ak12".replaceAll("ak(?!2)", replacement));
//否定意思
System.out.println("12356".replaceAll("123(?!=4)", replacement));
//否定意思
System.out.println("k223".replaceAll("(?<!k)3", replacement));
//所謂貪婪匹配,默認會去匹配最長的字符串,實際是對於正則式*中儘量多的次數的匹配(會將aXXAaxxxA作爲一個字符串),故稱爲貪婪
System.out.println("aXXAaxxxA".replaceAll("a.*A", replacement));
//相對於貪婪匹配,在次數的表達式後加一個?,會去匹配教短的字符串,實際是對於正則式*中儘量少的次數的匹配((會將aXXA,axxxA作爲兩個字符串)),故稱爲懶惰
//其他的用法如:*? {n,}? {n,m}? +? ?? 都是在原有次數的意義上,淨量少次數的匹配
System.out.println("aXXAaxxxA".replaceAll("a.*?A", replacement));
//好像不支持 open遞歸語法
//System.out.println("<XX<".replaceAll("(?'Open'<)\\w+(?'-Open'>)", replacement));
}
public static void replaceAll(String src,String regex,String replacement){
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(src);
System.out.println(matcher.matches());
System.out.println(matcher.replaceFirst("*"));
}
}