一、正則表達式是什麼
正則表達式即定義了符合一定規范的字符串,用來約束給定字符串的形式,通過一定的模式來操作給定的字符串。常見的操作有匹配、分割和替換等操作。
對字符串的操作一般用java.util.regex包下的Pattern和Matcher來配合操作。通常用的String類對字符串的正則操作內部也是用的前面兩者來實現的。
二、 常用的匹配規則
1 字符
構造 |
匹配 |
x
字符 x
\\
反斜線字符
\0n
帶有八進制值 0 的字符 n (0 <= n <= 7)
\0nn
帶有八進制值 0 的字符 nn (0 <= n <= 7)
\0mnn
帶有八進制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh
帶有十六進制值 0x 的字符 hh
\uhhhh
帶有十六進制值 0x 的字符 hhhh
\t
制表符 (‘\u0009’)
\n 新行
(換行)符 (‘\u000A’)
\r
回車符 (‘\u000D’)
\f
換頁符 (‘\u000C’)
\a
報警 (bell) 符 (‘\u0007’)
\e
轉義符 (‘\u001B’)
\cx
對應於 x 的控制符
2 字符類
構造 |
匹配 |
[abc]
a、b 或 c(簡單類)
[^abc]
任何字符,除了 a、b 或 c(否定)
[a-zA-Z]
a 到 z 或 A 到 Z,兩頭的字母包括在內(范圍)
[a-d[m-p]]
a 到 d 或 m 到 p:[a-dm-p](並集)
[a-z&&[def]]
d、e 或 f(交集)
[a-z&&[^bc]]
a 到 z,除了 b 和 c:[ad-z](減去)
[a-z&&[^m-p]]
a 到 z,而非 m 到 p:[a-lq-z](減去)
3 預定義字符類
構造 |
匹配 |
.
任何字符(與行結束符可能匹配也可能不匹配),
若要表示點用\.
\d
數字:[0-9]
\D
非數字: [^0-9]
\s
空白字符:[ \t\n\x0B\f\r]
\S
非空白字符:[^\s]
\w
單詞字符:[a-zA-Z_0-9]
\W
非單詞字符:[^\w]
4 邊界匹配器
構造 |
匹配 |
^
行的開頭
$
行的結尾
\b
單詞邊界
\B
非單詞邊界
\A
輸入的開頭
\G
上一個匹配的結尾
\Z
輸入的結尾,僅用於最後的結束符(如果有的話)
\z
輸入的結尾
5 Greedy 數量詞
構造 |
匹配 |
X?
X,一次或一次也沒有
X*
X,零次或多次
X+
X,一次或多次
X{n}
X,恰好 n 次
X{n,}
X,至少 n 次
X{n,m}
X,至少 n 次,但是不超過 m 次
6 特殊構造(非捕獲)
構造 |
匹配 |
(?:X)
X,作為非捕獲組
(?idmsux-idmsux)
Nothing,但是將匹配標志i d m s u x on - off
(?idmsux-idmsux:X)
X,作為帶有給定標志 i d m s u x on - off
(?=X)
X,通過零寬度的正 lookahead
(?!X)
X,通過零寬度的負 lookahead
(?<=X)
X,通過零寬度的正 lookbehind
(?