正則表達式速查表,快讀上手

最近須要用正則來匹配作數據解析方面的處理,整理一下正則表達式的基本用法,使用的時候查一查,方便快捷。正則表達式

元字符

代碼 說明
. 匹配除換行符之外的任意字符
* 匹配*前邊的內容重複 0 次或屢次
+ 匹配+前邊的內容重複 1 次或屢次
? 匹配?前邊的內容重複零次或一次
^ 匹配字符串的開始
$ 匹配字符串的結束
\d 匹配一位數字
\b 匹配單詞的開始或結束
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符

若是須要匹配元字符,則須要加上轉義字符\學習

懶惰限定符

代碼/語法 說明
*? 重複任意次,但儘量少重複
+? 重複 1 次或更屢次,但儘量少重複
?? 重複 0 到 1 次,但儘量少重複
{n,m}? 重複 n 到 m 次,但儘量少重複
{n,}? 重複 n 次以上,但儘量少重複

a.*b,它將會匹配最長的以 a 開始,以 b 結束的字符串。若是用它來搜索 aabab 的話,它會匹配整個字符串 aabab。測試

a.*?b匹配最短的,以 a 開始,以 b 結束的字符串。若是把它應用於 aabab 的話,它會匹配 aab(第一到第三個字符)和 ab(第四到第五個字符)。code

邏輯

代碼/語法 說明
{n} 重複 n 次
{n,} 重複 n 次或更屢次
{n,m} 重複 n 到 m 次
[] []中包含的字符出現任意一個
| 匹配分枝條件,從左到右地測試每一個條件
() ()內爲總體,與{}連用爲重複()內總體

反義

代碼/語法 說明
\W 匹配任意不是字母,數字,下劃線,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數字的字符
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x之外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母之外的任意字符

經常使用分組語法

分類 代碼/語法 說明
捕獲 (exp) 匹配exp,並捕獲文本到自動命名的組裏
(?exp) 匹配exp,並捕獲文本到名稱爲name的組裏,也能夠寫成(?'name'exp)
(?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號
零寬斷言 (?=exp) 匹配exp前面的位置,好比\b\w+(?=ing\b),匹配以 ing 結尾的單詞的前面部分(除了 ing 之外的部分)
(?<=exp) 匹配exp後面的位置,好比(?<=\bre)\w+\b會匹配以 re 開頭的單詞的後半部分(除了 re 之外的部分)
(?!exp) 匹配後面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
註釋 (?#comment) 這種類型的分組不對正則表達式的處理產生任何影響,用於提供註釋讓人閱讀

例子:ci

(?=exp)也叫零寬度正預測先行斷言,它斷言自身出現的位置的後面能匹配表達式 exp。好比\b\w+(?=ing\b),匹配以 ing 結尾的單詞的前面部分(除了 ing 之外的部分),如查找I'm singing while you're dancing.時,它會匹配 sing 和 danc。字符串

(?<=exp)也叫零寬度正回顧後發斷言,它斷言自身出現的位置的前面能匹配表達式 exp。好比(?<=\bre)\w+\b會匹配以 re 開頭的單詞的後半部分(除了 re 之外的部分),例如在查找 reading a book 時,它匹配 ading。get

零寬度負預測先行斷言(?!exp),斷言此位置的後面不能匹配表達式 exp。例如:\d{3}(?!\d)匹配三位數字,並且這三位數字的後面不能是數字;\b((?!abc)\w)+\b匹配不包含連續字符串 abc 的單詞。io

同理,咱們能夠用(?<!exp),零寬度負回顧後發斷言來斷言此位置的前面不能匹配表達式exp:(?<![a-z])\d{7}匹配前面不是小寫字母的七位數字。table

參照:class

輕鬆學習正則表達式

相關文章
相關標籤/搜索