正則表達式的概述
正則表達式,簡單來說就是正確規則的表達式,而這個規則是由java給我們定的。
具體解釋就是 正則表達式是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串(一種規則),有着自己特殊的應用。
在我們需要對qq號碼、電子郵箱、車牌號、身份證號碼等進行驗證時,可使用if else這種非正則表達式實現,但是這樣子會比較繁瑣。
用正則表達式實現的話可以幾行語句就搞定。
正則表達式的組成規則
規則字符在java.util.regex Pattern類中。
常用的規則字符如下:
字符:
字符 | 含義 |
---|---|
x | 字符 x (‘a’ 表示字符a) |
\ | 反斜線字符 |
\n | 換行符 |
\r | 回車符 |
字符類:
字符 | 含義 |
---|---|
[abc] | a、b或c |
[^abc] | 除了a、b或c之外的任何字符 |
[a-zA-Z] | a到z或A到Z,兩端的字母包含在範圍內 |
[0-9] | 0到9的字符都包括 |
預定義字符類:
字符 | 含義 |
---|---|
. | 代表任何字符,使用是需要轉義即 . |
\d | 代表數字 0-9 |
\w | 代表單詞字符 [a-zA-Z_0-9] |
邊界適配器:
字符 | 含義 |
---|---|
^ | 行的開頭 |
$ | 行的結尾 |
\b | 單詞邊界,即不是單詞的地方 |
Greedy 數量詞:
字符 | 含義 |
---|---|
X? X | 一次或者一次也沒有 |
X* X | 零次或者多次 |
X+ X | 一次或者多次 |
X{n} X | 恰好n次 |
X{n,} X | 至少n次 |
X{n,m} X | 至少n次,但是不超過m次 |
正則表達式的使用
正則表達式可以用於判斷、分割、替換字符串等方面。
正則表達式的判斷功能
可以判斷輸入的字符串是否符合某種規則。可以使用matches()方法。
正則表達式的分割功能
可以依據正則表達式來進行字符串的分割。可以使用split()方法。
正則表達式的替換功能
可以使用正則表達式來替換字符串中的某個子字符串。可以使用replaceAll()方法
正則表達式的獲取需要的類
獲取正則表達式的時候,我們需要用到的類由Pattern類和Matcher類。
Pattern類:
正則表達式的編譯表示形式。
指定爲字符串的正則表達式必須首先被編譯爲此類的實例。然後,可將得到的模式用於創建 Matcher 對象,依照正則表達式,該對象可以與任意字符序列匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。
Matcher類:
通過解釋 Pattern 對 character sequence 執行匹配操作的引擎。
通過調用模式器的 matcher 方法從模式創建匹配器。創建匹配器後,可以使用它執行三種不同的匹配操作:
- matches 方法嘗試將整個輸入序列與該模式匹配。
- lookingAt 嘗試將輸入序列從頭開始與該模式匹配。
- find 方法掃描輸入序列以查找與該模式匹配的下一個子序列。
模式和匹配器的典型調用順序:
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();
爲什麼要有模式器和匹配器呢?我們使用String類中的matches()方法不是就可以了嗎?
我們使用String類中的matches()方法僅僅只能判斷字符串是否符合正則表達式,但是卻不能對其進行其他的操作。若要進行其他的操作,就需要用到模式器和匹配器啦。
正則表達式的獲取功能:
Pattern和Matcher需要結合使用。使用 find()方法 和 group()方法,一定要先使用find()方法先找到 才能用group()方法獲取出來。