一、引言
什麼是Regex:可以使用單個字串表示的規則。最通用的Regex校正電子郵箱的字串為:^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$,而電子郵箱也是一個字串,從而實現一個字串對另一個字串的匹配校正。在實際開發中,Regex通常被用來檢查某些字串是否合規,例如:使用者名稱、密碼、手機號……。
二、Regex的文法規則
1. API文檔中:java.util.regex.Pattern 實現的介面:Serializable
2. Regex區分大小寫字母。
3. 字元與其含義
字元 |
含義 |
例子 |
x |
字元x |
“a”,需要匹配的字串內容就是“a” |
\ |
逸出字元 |
“\t” 定位字元, “\n” 分行符號 , “\r” 斷行符號符,“\\” 反斜線\ |
[abc] |
字元a|b|c其中一個 |
“a” |
[^abc] |
上面取反 |
“t” |
[a-zA-Z] |
一個大寫或小寫字母 |
“a” |
[0-9] |
一個數字 |
“0” |
[a-zA-Z_0-9] |
一個字母或數字或“_” |
“9” |
\d |
預定義字元類 [0-9] |
“0” |
\w |
預定義字元類 [a-zA-z_0-9] |
“y” |
^ |
行的開頭 |
^[abc][0-9]$ 需要匹配的內容從[abc]這個位置開始 |
$ |
行的結尾 |
需要匹配的內容以[0-9]結束 |
\b |
邊界匹配器-單詞邊界 |
“\b[abc]\b”a|b|c的左右兩邊需要的是非單詞字元[a-zA-Z_0-9] |
x? |
x出現一次或沒有出現 |
“a?”一個字元a,或一個a都沒有 |
x* |
x出現多次或沒有出現 |
“a*”多個字元a,或一個a都沒有 |
x+ |
x出現一次或多次 |
“a+”一個字元a或多個字元a |
x{n} |
x出現恰好n次 |
“a{3}”字元a出現3次 |
x{n,} |
x至少出現n次 |
“a{3,}”字元a至少出現3次 |
x{n,m} |
x至少出現n次,但不超過m次 |
“a{3,6}”字元a至少出現3次,但不超過6次 |
三、Regex規則匹配練習
1. [0-9]{6,12} 長度為6位到12位的數字
2. 1[34578][0-9]{9} 第1位為1,第2位為3或4或5或7或8,後面還有9個數字
3. a*b 多個a後面跟著b結尾,或者a沒出現以b結尾 “aaab”true “abc”false
四、String類中設計Regex的常用方法
1. boolean matches(String regex) 告知此字串是否匹配給定的Regex
2. String split(Stringregex) 根據給定Regex的匹配拆分此字串,拆分後放在String[]數組中
3. String replaceAll(String regex,Stringreplacement)使用給定replacement替換此字串所有匹配給定的Regex的子字串
Demo:
結果:
五、數字相關Regex
1. 匹配正整數:“\\d+”
2. 匹配正小數:“\\d+\\.\\d+”
3. 匹配負整數:“-\\d+”
4. 匹配負小數:“-\\d+\\.\\d+”
5. 匹配保留兩位小數的正數:“\\d+\\.\\d{2}“
9. 匹配保留1-3位小數的正數:“\\d+\\.\\d{1,3}“