正則表示式筆記
正則表示式(regular expression)描述了一種字串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的字串做替換或者從某個串中取出符合某個條件的字串等。
正則表示式線上測試:
ofollow,noindex">http://www.regexpal.com/元字元
常用元字元:
程式碼 | 說明 |
---|---|
. | 匹配除換行符以外的任意字元 |
\w | 匹配字母或數字或下劃線或漢字 |
\d | 匹配數字 |
\s | 匹配空格 |
\b | 匹配單詞的開始或結束 |
^ | 匹配字串的開始,如果是處理多行,意義變成行開始處 |
$ | 匹配字串的結束,如果是處理多行,意義變成行結束處 |
限定符
常用限定符:
程式碼 | 說明 |
---|---|
* | *前面的內容重複任意次 |
+ | +前面的內容重複一次或者多次 |
? | 重複零次或一次 |
{n} | 重複n次 |
{n, } | 重複次數大於等於n |
{n,m} | 重複次數大於等於n小於等於m |
字元類
[auiou] 匹配任何一個英文母音字母
[.?!] 匹配標點符號(.?!)
反義
程式碼 | 說明 |
---|---|
\W | 匹配任意不是字母、數字、下劃線、漢字的字元 |
\S | 匹配任意不是空白符的字元 |
\D | 匹配任意非數字的字元 |
\B | 匹配不是單詞開頭或結束的位置 |
[^x] | 匹配除了x以外的任意字元 |
[^abcd] | 匹配除了abcd以外的任意字元 |
分組
程式碼 | 說明 |
---|---|
(exp) | 匹配exp,並捕獲文字到自動命名組中 |
(?<name>exp)
|
匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?`name`exp) |
(?:exp) | 匹配exp,不捕獲匹配的文字,也不給次分組分配組號 |
(?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp後面的位置 |
(?!exp) | 匹配後面跟的不是exp的位置 |
(?<!exp) | 匹配前面不是exp的位置 |
(?#comment) | 註釋 |
貪婪與懶惰
通常重複限定符的行為是匹配儘可能多
的字元,在限定符後面加?
使之成為惰性限定符,例如*?
的含義為重複任意次數,但是儘可能少
部落格地址 ,如果有幫助點個贊支援一下:grin: