學習《30分鐘正則入門》 總結

package com.joker.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Reigix {
 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("*"));
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章