1. 程式人生 > >正則表示式和常用規則

正則表示式和常用規則

* 常用的正則表示式規則:
 * a:字元
 * x 字元 x ,   舉例:'a'表示字元a
 * \\ 反斜線字元 ,    在正則表示式中,只有兩個\\才能表達一個\
 * \n 新行(換行)符 ('\u000A') 
 * \r 回車符 ('\u000D') 
 * b:字元類
 * [abc] a、b 或 c(簡單類) 
 * [^abc] 任何字元,除了 a、b 或 c(否定) 
 * [a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍)        表示所有的字母,不分大小寫
 *     同理,[0-9] 表示所有的數字
 * 
 * c:預定義字元類
 * . 任何字元(與行結束符可能匹配也可能不匹配)   假如要表示的就是.字元本身,用\.表示
 * \d 數字:[0-9]     實際操作中,因為\\表示\,所以要寫成\\d表示數字0~9
 * \w 單詞字元:[a-zA-Z_0-9] 
 * 注意,在正則表示式裡組成單詞的東西必須有 a-z,A-Z,0-9組成
 * 
 * d:邊界匹配器
 * ^ 行的開頭 
 * $ 行的結尾 
 * \b 單詞邊界      舉例: hello world?123    字母'o'和'w'之間的空格、'?'是邊界
 * e:Greedy 數量詞
 * X? X,一次或一次也沒有 
 * X* X,零次或多次 
 * X+ X,一次或多次 
 * X{n} X,恰好 n 次 
 * X{n,} X,至少 n 次 
 * X{n,m} X,至少 n 次,但是不超過 m 次 
 * 注意:如果在一個規則後面沒有給定次數,那麼預設是一次
 * 
 * 正則表示式的應用:
 * a:判斷功能
 * String的public boolean matches(String regex)
 * b:分割功能
 * String的public String[] split(String regex)
 * 根據給定正則表示式的匹配拆分此字串
 * c:替換功能
 * String的public String replaceAll(String regex, String replacement)
 * 使用給定的replacement替換字串中所有匹配給定的正則表示式的子字串
 * d:獲取功能
 * Pattern和Matcher類的使用

 * 模式和匹配器的使用。

 *    a:判斷功能舉例:

 *    需求:判斷手機號碼是否滿足要求

                Scanner sc = new Scanner(System.in);

                System.out.println("請輸入你的手機號:");

                String phoneNumber = sc.nextLine();

                String regex = "1[3578]\\d{9}";

                System.out.println("你的手機號:" + phoneNumber.matches(regex));

 *     b:分割功能舉例:
 *  需求: 有一個字串"91 27 46 38 50",請寫程式碼實現最終的輸出結果

 *   "27 38 46 50 91"

String str = "91 27 46 38 50";
//對字串進行分割,得到一個字元陣列
String[] strArray = str.split(" ");
//把String[]轉為int[]
int[] intArray = new int[strArray.length];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = Integer.parseInt(strArray[i]);
}
//對int[]排序
Arrays.sort(intArray);
//將排序後的字元拼接成字串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < intArray.length; i++) {
sb.append(intArray[i]).append(" ");
}
//轉為字串,去尾部空格

String result = sb.toString().trim();

 *     c:替換功能舉例:

 *  需求:有一個字串"Hello1234566World6227002511086653java"把其中非字母用'*'代替

//定義一個字串
String str = "Hello1234566World6227002511086653java";
//定義一個規則,把數字替換為*
String regex1 = "\\d+";
String regex2 = "\\d";
String replacement1 = "*";
String replacement2 = "";
String result1 = str.replaceAll(regex1, replacement1);  //Hello*World*java
String result2 = str.replaceAll(regex2, replacement1);  //Hello*******World****************java

String result3 = str.replaceAll(regex1, replacement2);  //HelloWorldjava

 *    d:獲取功能舉例:

 *  需求:將"da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?"中3個字母的子字串輸出

                String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
String regex = "\\b\\w{3}\\b";  //    \\b是邊界
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group());

}

    注意:調group()方法前必須先呼叫find()方法才能返回一個group.不然會報// IllegalStateException: No match found