Java學習之正則表達式
Java正則表達式字符串模式。
正則表達式可以用來搜索、編輯和處理文本。
正則表達式不盡限於一種語言,但在每一種語言中又細微的差別。
java.util.regex包中主要有這3個類:
- Pattern類:
pattern對象是一個正則表達式的編譯表示。Pattern類沒有公共構造方法。要創建一個Pattern對象,你必須首先調用其公共靜態編譯方法,它返回一個Pattern對象。該方法接受一個正則表達式作為它的第一個參數。
- Matcher類:
Matcher對象是對輸入字符串進行解釋和匹配操作的引擎。與Pattern類一樣,Matcher也沒有公共構造方法。你需要調用Pattern對象的matcher方法來獲得一個Matcher對象。
- PatternSyntaxException:
PatternSyntaxException是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。
捕獲組
捕獲組是把多個字符當一個單獨單元進行處理的方法,它通過對括號內的字符分組來創建。
例如,正則表達式(dog) 創建了單一分組,組裏包含"d","o",和"g"。
捕獲組是通過從左至右計算其開括號來編號。例如,在表達式((A)(B(C))),有四個這樣的組:
- ((A)(B(C)))
- (A)
- (B(C))
- (C)
可以通過調用matcher對象的groupCount方法來查看表達式有多少個分組。groupCount方法返回一個int值,表示matcher對象當前有多個捕獲組。
還有一個特殊的組(組0),它總是代表整個表達式。該組不包括在groupCount的返回值中。
正則表達式語法:用符號來描述書寫規則: /中間寫正則表達式/ |:代表或者 ():優先級
字符 | 說明 |
\ |
將下一字符標記為特殊字符、文本、反向引用、八進制的轉義符。例如“n”匹配“n”,“\n”匹配換行符 “\t”匹配制表符,“\(”匹配“(” |
^ | 匹配開頭;/^ve/ 匹配以ve開頭的 |
$ | 匹陪結尾 ;/ve$/ 以ve結尾的 |
\d | 任意一個數字 |
\D | 非數字字符匹配。等效於 [^0-9]。 |
\w | 任意一個數字或字母 |
\s | 任意字符串 |
{n} | 把左邊的表達式重復n遍 |
{m ,n} | 把左邊的表達式重復至少m遍,至多n遍 |
{m,} | 把左邊的表達式重復至少m遍,至多不限 |
+ | 左邊的表達式,至少出現一次,至多不限,相當於{1,} |
* | 左邊的表達式,至少出現0次,至多不限,相當於{0,} |
? | 左邊的表達式,至少出現0次,至多1次,相當於{0,1} |
[a,b,c] | 只能取方括號中內容之一,[a-z]從a~z之間取任取一個字母,[1-9]從1~9數字中任取一個 |
. | 匹配除"\r\n"之外的任何單個字符 |
[^xyz] | 反向字符集。匹配未包含的任何字符 |
\b | 匹配一個字邊界,即字與空格間的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er" |
\B | 非字邊界匹配。"er\B"匹配"verb"中的"er",但不匹配"never"中的"er"。 |
\cx | 匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回車符。x 的值必須在 A-Z 或 a-z 之間。如果不是這樣,則假定 c 就是"c"字符本身。 |
\f | 換頁符匹配。等效於 \x0c 和 \cL。 |
\r | 匹配一個回車符。等效於 \x0d 和 \cM。 |
\s | 匹配任何空白字符,包括空格、制表符、換頁符等。與 [ \f\n\r\t\v] 等效。 |
\S | 匹配任何非空白字符。與 [^ \f\n\r\t\v] 等效。 |
\w | 匹配任何字類字符,包括下劃線。與"[A-Za-z0-9_]"等效。 |
\W | 與任何非單詞字符匹配。與"[^A-Za-z0-9_]"等效。 |
\un | 匹配 n,其中 n 是以四位十六進制數表示的 Unicode 字符。例如,\u00A9 匹配版權符號 (?)。 |
Matcher類的方法
索引方法
索引方法提供了有用的索引值,精確表明輸入字符串中在哪能找到匹配:
序號 | 方法及說明 |
---|---|
1 | public int start() 返回以前匹配的初始索引。 |
2 | public int start(int group) 返回在以前的匹配操作期間,由給定組所捕獲的子序列的初始索引 |
3 | public int end() 返回最後匹配字符之後的偏移量。 |
4 | public int end(int group) 返回在以前的匹配操作期間,由給定組所捕獲子序列的最後字符之後的偏移量。 |
研究方法
研究方法用來檢查輸入字符串並返回一個布爾值,表示是否找到該模式:
序號 | 方法及說明 |
---|---|
1 | public boolean lookingAt() 嘗試將從區域開頭開始的輸入序列與該模式匹配。 |
2 | public boolean find() 嘗試查找與該模式匹配的輸入序列的下一個子序列。 |
3 | public boolean find(int start) 重置此匹配器,然後嘗試查找匹配該模式、從指定索引開始的輸入序列的下一個子序列。 |
4 | public boolean matches() 嘗試將整個區域與模式匹配。 |
Java學習之正則表達式