最近須要用正則來匹配作數據解析方面的處理,整理一下正則表達式的基本用法,使用的時候查一查,方便快捷。正則表達式
代碼 | 說明 |
---|---|
. | 匹配除換行符之外的任意字符 |
* | 匹配* 前邊的內容重複 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