正規表示式學習筆記一

衣舞晨風發表於2017-04-13

1、連字元

連字元,一般和[]一起使用,只有連字元在字元組內部,並且出現在兩個字元之間時,才能表示字元的範圍,如果出現在字元組的開頭則只能表示連字元本身。
這裡寫圖片描述

[]是定義匹配的字元範圍。比如 [a-zA-Z0-9] 表示相應位置的字元要匹配英文字元和數字。[\s*]表示空格或者*號。

2、排除型字元組

在方括號[….]中列出希望匹配的所有字元,這種字元組叫做”普通字元組”.
排除型字元組非常類似普通字元組[…],只是在開方括號[之後緊跟一個脫字元^,即寫作[^….],表示”在當前位置,匹配一個沒有列出的字元 “。

3、點號

.*匹配除換行符以外的任意字元
. 匹配.號本身
在字元組內部.也只能匹配自身

這裡寫圖片描述

4、字元組[]

在正規表示式中,它表示“在同一個位置可能出現的各種字元”。

5、量詞

作用:限定之前的字元出現次數

程式碼/語法 說明
* 重複零次或更多次,等價於{0,}
+ 重複一次或更多次,等價於{1,}
? 重複零次或一次,等價於{0,1}
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次

量詞只能規定之前字元或字元組的出現次數(只能匹配單個字元)
如果要規定一個字串的出現次數,必須使用括號”()”,在括號內填寫字串,在閉括號之後新增量詞。

6、括號

1、捕獲分組

作用:將括號內的子表示式捕獲的字串存放到匹配的結果中,供匹配完成後訪問。
形式: 使用普通的括號”(…)”。
這裡寫圖片描述

捕獲分組的注意事項:
1、只要使用了括號,就存在捕獲分組。
2、捕獲分組按照開括號出現的從左到右的順序編號,編號從1開始,遇到括號巢狀的情況也是如此。
3、如果捕獲分組之後存在量詞,則匹配結果中,捕獲分組儲存的是子表示式最後一次的匹配字串。

2、不捕獲文字

如果正規表示式很複雜,或者需要處理的文字很長,捕獲分組會降低效率。
作用:僅僅用來對錶達式分組,而不把分組捕獲的文字存入結果。
形式:”(?:…)”。
這裡寫圖片描述

3、反向引用

捕獲組(Expression)在匹配成功時,會將子表示式匹配到的內容,儲存到記憶體中一個以數字編號的組裡,可以簡單的認為是對一個區域性變數進行了賦值,這時就可以通過反向引用方式,引用這個區域性變數的值。一個捕獲組(Expression)在匹配成功之前,它的內容可以是不確定的,一旦匹配成功,它的內容就確定了,反向引用的內容也就是確定的了。

反向引用必然要與捕獲組一同使用的,如果沒有捕獲組,而使用了反向引用的語法,不同語言的處理方式不一致,有的語言會拋異常,有的語言會當作普通的轉義處理。

作用:在表示式的某一部分,動態重複之前的子表示式所匹配的文字。
形式:”\1” 其中的1為捕獲分組的編號。
這裡寫圖片描述

7、錨點

\b 匹配單詞的開始或結束
\b 標識單詞分界符,要求一側是單詞字元,另一側是非單詞字
單詞字元通常指的是英文字元、數字字元,對中文不適用
非單詞字元通常指的是各種標點符號和空白字元
這裡寫圖片描述

8、環視

程式碼/語法 說明
(?=exp) 匹配exp前面的位置
(?< =exp) 匹配exp後面的位置
(?!exp) 匹配後面跟的不是exp的位置
(?< !exp) 匹配前面不是exp的位置

環視結構僅僅用於布林判斷,位置查詢替換或者分割,結構內的子表示式所匹配的文字,不會儲存在整個表示式的匹配結果之中,所以不能用於字元的獲取。

9、匹配模式

改變某些結構的匹配規定。

形式 說明
I Case Insensitive 不區分大小寫
S SingleLine(dot All) 點號通配,這裡得dot(點)號是能夠匹配所有的字元,包括換行和回車符
M MultiLine 多行模式
X Comment 註釋模式

1、不區分大小寫

作用:在匹配時,不對英文單詞區分大小寫。

2、單行模式

作用:更改點號 “.”的匹配規定,本來預設的匹配模式 “.”號是不會匹配換行和回車的,現在,設定了這個模式也就可以匹配換行符了。

3、多行模式

作用:更改 “^”和 “$”的匹配規定,它們可以匹配字串內部各行文字的開頭和結束位置。
\A和\Z則不受影響。

4、註釋模式

作用:在正規表示式內部可以使用註釋。
形式:註釋以 “#”開頭,以換行符結束(或者直到表示式的末尾)
使用此模式後,會忽略正規表示式中的所有空白字元。

10、模式的作用範圍

作用:精確控制各個模式的作用範圍。
形式:在表示式中,以(?ismx)的方式啟用模式,以(?-ismx)的方式停用模式。
這裡寫圖片描述
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章