常用元字符
. 匹配除換行符以外的任意字符。
\w 匹配字母或數字或下划線或漢字。
\W 匹配任意不是字母,數字,下划線,漢字的字符。
\s 匹配任意的空白符。
\S 匹配任意不是空白符的字符。等價於 [^ \f\n\r\t\v]
\d 匹配數字。
\D 匹配任意非數字的字符。等價於 [^0-9]
\b 匹配單詞的開始或結束。
\B 匹配不是單詞開頭或結束的位置
[ck] 匹配包含括號內元素的字符
[^CK] 匹配除了CK以外的任意字符
^ 匹配行的開始。
$ 匹配行的結束。
\ 對下一個字符轉義。比如$是個特殊的字符。要匹配$的話就得用\$
| 分支條件,如:x|y匹配 x 或 y。
[\u4e00-\u9fa5] 匹配漢字文字
[^\u4e00-\u9fa5] 匹配非漢字字符
[^\x00-\xff] 匹配雙字節字符(漢字、中文標點符號等)
特殊元字符
\f 匹配一個換頁符。等價於 \x0c 和 \cL。
\n 匹配一個換行符。等價於 \x0a 和 \cJ。
\r 匹配一個回車符。等價於 \x0d 和 \cM。
\t 匹配一個制表符。等價於 \x09 和 \cI。
\v 匹配一個垂直制表符。等價於 \x0b 和 \cK。
限定符
* 匹配前面的子表達式零次或多次。 + 匹配前面的子表達式一次或多次。 ? 匹配前面的子表達式零次或一次。 {n} n 是一個非負整數。匹配確定的 n 次。 {n,} n 是一個非負整數。至少匹配n 次。 {n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。
懶惰限定符
*? 重復任意次,但盡可能少重復。如 "acbacb" 正則 "a.*?b" 只會取到第一個"acb" 原本可以全部取到但加了限定符后,只會匹配盡可能少的字符 ,而"acbacb"最少字符的結果就是"acb" 。
+? 重復1次或更多次,但盡可能少重復。與上面一樣,只是至少要重復1次。
?? 重復0次或1次,但盡可能少重復。如 "aaacb" 正則 "a.??b" 只會取到最后的三個字符"acb"。
{n,m}? 重復n到m次,但盡可能少重復。如 "aaaaaaaa" 正則 "a{0,m}" 因為最少是0次所以取到結果為空。
{n,}? 重復n次以上,但盡可能少重復。如 "aaaaaaa" 正則 "a{1,}" 最少是1次所以取到結果為 "a"。
捕獲分組
(exp) 匹配exp,並捕獲文本到自動命名的組里。 (?<name>exp) 匹配exp,並捕獲文本到名稱為name的組里。 (?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號以下為零寬斷言。 (?=exp) 匹配exp前面的位置。如 "How are you doing" 正則"(?<txt>.+(?=ing))" 這里取ing前所有的字符,並定義了一個捕獲分組名字為 "txt" 而"txt"這個組里的值為"How are you do"; (?<=exp) 匹配exp后面的位置。如 "How are you doing" 正則"(?<txt>(?<=How).+)" 這里取"How"之后所有的字符,並定義了一個捕獲分組名字為 "txt" 而"txt"這個組里的值為" are you doing"; (?!exp) 匹配后面跟的不是exp的位置。如 "123abc" 正則 "\d{3}(?!\d)"匹配3位數字后非數字的結果 (?<!exp) 匹配前面不是exp的位置。如 "abc123 " 正則 "(?<![0-9])123" 匹配"123"前面是非數字的結果也可寫成"(?!<\d)123"
