[學習筆記] Java正則表示式
阿新 • • 發佈:2022-05-29
正則表示式
正則表示式定義了字串的模式,可以用於搜尋、編輯或處理文字;
正則表示式使用字串描述規則,並用於匹配字串;
一個正則表示式其實就是一個描述規則的字串,被正則表示式引擎用於匹配文字;
正則表示式是一套規則,可以用於任何語言;
Java提供內建的java.util.regex包用於支援正則表示式;
若正則表示式含有特殊字元,則需要用 \ 對其進行轉義,在Java當中的字串中 \ 要用 \\來表示;
匹配規則
正則表示式按照從左到右的順序進行匹配;
匹配任意字元
在實際應用時,正則表示式用於進行模糊匹配,精確匹配由String.equals()就可以完成;
正則表示式語法
單個字元匹配規則
正則表示式 | 匹配字元 |
單個字元,如A | 匹配指定字元,如A |
\u#### | 匹配指定的Unicode字元 |
. | 匹配除\r和\n之外的任意一個字元 |
\d | 匹配任意一個數字,0-9 |
\w | 匹配任意一個字母、數字或下劃線 |
\s | 匹配空格或Tab鍵 |
\D | 匹配非數字 |
\W | 匹配非\w |
\S | 匹配非空格或Tab鍵(\t) |
\f | 匹配換頁符 |
\n | 匹配換行符 |
\r | 匹配回車符 |
\t | 匹配垂直製表符 |
匹配多個字元
正則表示式 | 匹配字元 |
A* | 匹配任意個數的字元 |
A+ | 至少匹配一個字元 |
A? | 匹配0個或1個字元 |
A{n} | 匹配指定的n個字元 |
A{m,n} | 匹配指定範圍內個數的字元 |
A{n,} | 至少匹配n個字元 |
複雜的匹配規則
在其他語言中,要在正則表示式中插入一個反斜槓 \, 只需要用 \ 表示即可,而在Java中,需要兩個反斜槓 \\ 才能表示一個反斜槓 \;
根據Java語言規範,Java原始碼的字串中的反斜槓被解釋為Unicode轉義或其他字元轉義,因此必須在字串字面值中使用兩個反斜槓,表示正則表示式受到保護,不被Java編譯器解釋;
正則表示式 | 匹配字元 |
\ | 用於轉義字元,將下一個字元標記為特殊字元、文字等 |
^ | 用正則表示式進行多行匹配時,^ 表示字串開始的位置 |
$ | 用正則表示式進行多行匹配時, $ 表示字串結束的位置 |
? | 在正則表示式的規則後加上?表示採用非貪婪匹配模式(相比於預設的貪婪匹配模式儘可能長的匹配字串,非貪婪模式會盡可能短的匹配字串) |
A|B | 用|連線兩個正則表示式,表示A或B |
[ABC] | 將所有符合條件的字元都列在方括號內組成一個字符集,匹配任何一個在字符集當中的字元,即匹配A或B或C |
[^ABC] | 將^放在字符集的開頭表示一個反向字符集,即匹配A或B或C以外的字元 |
[a-z] | 由於在字符集當中列出所有要匹配的字元比較麻煩,可以使用字元範圍的形式來對字符集進行簡化 |
[^a-z] | 為了簡化反字符集,也可以使用指定範圍字元 |
分組匹配
在正則表示式中,可以使用括號(pattern)將子規則括起來表示匹配pattern及其子表示式;
括號還可以用於進行分組匹配,把要匹配的規則用括號進行分組可以方便後續對子字串的提取;