重複限定符:
例如:匹配8位數字的QQ號碼:^\d{8}$
分組 : 正則表達式中用小括號 () 來做分組,也就是括號中的內容作爲一個整體。
如:匹配字符串中包含 0 到多個 ab 開頭:^(ab)*
轉義 : 要匹配以 (ab) 開頭:^(\(ab\))*
條件或 : 正則用符號 | 來表示或,也叫做分支條件,當滿足正則裏的分支條件的任何一種條件時,都會當成是匹配成功。
區間 :
限定 0 到 9 可以寫成 [0-9] 限定 A-Z 寫成 [A-Z] 限定某些數字 [165]
零寬斷言:
正向先行斷言(正前瞻):
語法:(?=pattern)
作用:匹配 pattern 表達式的前面內容,不返回本身。
正向後行斷言(正後顧):
語法:(?<=pattern)
作用:匹配 pattern 表達式的後面的內容,不返回本身。
負向先行斷言(負前瞻):
語法:(?!pattern)
作用:匹配非 pattern 表達式的前面內容,不返回本身。
負向後行斷言(負後顧):
語法:(?<!pattern)
作用:匹配非 pattern 表達式的後面內容,不返回本身。
捕獲和非捕獲
捕獲組:匹配子表達式的內容,把匹配結果保存到內存中中數字編號或顯示命名的組裏,以深度優先進行編號,之後可以通過序號或名稱來使用這些匹配結果。
數字編號捕獲組:
語法:(exp)
解釋:從表達式左側開始,每出現一個左括號和它對應的右括號之間的內容爲一個分組,在分組中,第 0 組爲整個表達式,第一組開始爲分組。
命名編號捕獲組:
語法:(?<name>exp)
解釋:分組的命名由表達式中的 name 指定
非捕獲組:
語法:(?:exp)
解釋:和捕獲組剛好相反,它用來標識那些不需要捕獲的分組,說的通俗一點,就是你可以根據需要去保存你的分組。
反向引用
根據捕獲組的命名規則,反向引用可分爲:
-
數字編號組反向引用:\k 或\number
-
命名編號組反向引用:\k 或者\'name'.
貪婪和非貪婪
貪婪:
貪婪匹配:當正則表達式中包含能接受重複的限定符時,通常的行爲是(在使整個表達式能得到匹配的前提下)匹配儘可能多的字符,這匹配方式叫做貪婪匹配。
特性:一次性讀入整個字符串進行匹配,每當不匹配就捨棄最右邊一個字符,繼續匹配,依次匹配和捨棄(這種匹配 - 捨棄的方式也叫做回溯),直到匹配成功或者把整個字符串捨棄完爲止,因此它是一種最大化的數據返回,能多不會少。
懶惰(非貪婪):
懶惰匹配:當正則表達式中包含能接受重複的限定符時,通常的行爲是(在使整個表達式能得到匹配的前提下)匹配儘可能少的字符,這匹配方式叫做懶惰匹配。
特性:從左到右,從字符串的最左邊開始匹配,每次試圖不讀入字符匹配,匹配成功,則完成匹配,否則讀入一個字符再匹配,依此循環(讀入字符、匹配)直到匹配成功或者把字符串的字符匹配完爲止。
反義: