1. 程式人生 > 實用技巧 >第十六次總結 正則表示式

第十六次總結 正則表示式

  1. 什麼是正則表示式?
  2. 正則表示式的字元?
  3. 預定義的字元?
  4. 字元的數量詞? 
  5. 懶惰性數量詞和貪婪性數量詞?
  6. 驗證一個手機號碼是不是合法的?

    驗證中國的座機號碼是不是合法的?

區號-電話號
0731-88888888
0730-7777777
010-11111111


1.什麼是正則表示式?

1.正則表示式就是一個字串
是一個用來對字串進行處理的一個特殊的字串
可以簡化字串的處理

匹配 equals matches
擷取 substring
替換 replace
切割 split

2.正則表示式的組成

a.字元 必須
b.數量 可選

c.分組 可選


2.正則表示式的字元?

任何一個字元都可以是正則表示式的字元
[abc] 表示一個字元,a或者b或者c
(b|d|rt) 表示一組字元 b或者的或者rt
[a-z] 表示任意一個小寫字母
[A-Z] 表示任意一個大寫字母
[0-9] 表示任意一個數字
[1-5] 表示1~5這5個數字中的某一個
[a-zA-Z0-9] 表示所有的字母和數字中的某一個
[a-m&&[h-z]] 等價於[h-m]
[^bcd] 除開abcd以外的所有字元中的一個
[ae-z]
[a-zA-Z_0-9] 所有的單詞字元


3.預定義的字元?

. 一個任意字元
\d 數字,等價於[0-9]
\D 非數字等價於[^0-9]
\w 所有的單詞字元,等價於[a-zA-Z_0-9]
\W 非單詞字元
\s 空白字元 空格 \t \r \n
\S 非空白字元


4.字元的數量詞?

用來表示字元要出現的次數
{5,10} 表示最少5次,最多10次
{5,} 表示最少5次,無上限
{5} 表示必須5次
? 表示0次或一次
* 表示0次或多次
+ 表示1次或多次

案例
x[abc]{5,10}y
x[abc]?y 可以匹配 xay xby xcy xy

x[abc]+y 不能匹配 xy
可以匹配 xabcabcy
x[abc]*y 可以匹配 xy
可以匹配 xabcabcy


5.懶惰性數量詞和貪婪性數量詞?

{5,10}? 5個到10個,但儘可能少
?? 0個或者1個,但儘可能少
*? 0個或者多個,但儘可能少
+? 1個或者多個,但儘可能少

{5,10}+ 5個到10個,但儘可能多
?+ 0個或者1個,但儘可能多
*+ 0個或者多個,但儘可能多
++ 1個或者多個,但儘可能多


6.驗證一個手機號碼是不是合法的?

驗證中國的座機號碼是不是合法的?

區號-電話號
0731-88888888
0730-7777777
010-11111111

/**
 * 正則表示式
 */
public class Demo {
    public static void main(String[] args) {
        //座機號碼
        String number = "0731-11111111";
        sptel(number);
        //手機號碼
        String telNunber = "17369299863";
        tel(telNunber);
    }

    /**
     * 驗證中國的座機號碼是不是合法的
     *
     * @param number 電話號碼
     */
    public static void sptel(String number) {
        String regex = "(\\w{3,4}|010)-\\d{7,8}";
        System.out.println(number.matches(regex));
    }

    /**
     * 驗證一個手機號碼是不是合法的
     *
     * @param telNunber 手機號碼
     */
    public static void tel(String telNunber) {
        String regex = "1[^012]\\d{9}";
        boolean l = telNunber.matches(regex);
        System.out.println(l);
    }
}