正則表示式學習筆記(二)——簡單的正則表示式
一、簡單的正則表示式
注意:
在使用正則表示式的時候,會發現幾乎所有的問題都有不止一種解決方法。
有的比較簡單,有的比較快速,有的相容性很好,有的功能更全,同一個問題往往會有多種解決方案。
二、匹配單個字元
1、匹配純文字
2、多個匹配結果直接輸入文字,就可以匹配。
如:
I am a boy.
輸入正則表示式 am
絕大多數正則表示式引擎的預設行為是隻返回第1個匹配結果,也有實現了一種能夠把所有的匹配結果全部找出的機制(通常返回一個數組或是其他的專用格式)。
3、字母的大小寫問題
絕大多數正則表示式都支援不區分字母大小寫的操作,強制執行一次不區分字母大小寫的搜尋。
4、匹配任意字元
. 字元(英文句號)可以匹配任何一個單個的字元。
注意:
通過DOS的檔案搜尋功能 正則表示式 . 字元相當於DOS的?字元
SQL中的 _ (下劃線) 字元 相當於正則表示式 . 字元
正則表示式可以用來匹配包含著字串內容的模式。
匹配的並不總是整個字串,而是與某個模式相匹配的字元——即使它們只是整個字串的一部分。
5、匹配特殊字元
如果模式裡需要一個 . 就要想辦法來告訴正則表示式,你需要的是 . 本身而不是它在正則表示式裡的特殊含義。
為此,必須在 . 的前面加上一個 \ (反斜槓)字元來對它進行轉義。
\ 是一個元字元
(metacharacter,表示“這個字元有特殊含義,而不是字元本身含義”)注意:
如果需要搜尋 \ 本身,就必須對字元進行轉義,相應的轉義序列是兩個來許的反斜槓字元 \\ .
在絕大多數的正則表示式實現裡, . 可以匹配除了換行符之外的任何單個字元。
三、匹配一組字元
1、匹配多個字元中的某一個
2、利用字元集合區間[ns]a.\.xls 匹配以[ns]開頭 : 這個集合匹配字元n或s(但不匹配其他字元)
注意:驗證某個模式能不能獲得預期的匹配結果並不困難,但如何驗證它不會匹配到你不想要的東西可就沒那麼簡單了。
[Rr]eg[Ee]x 可以匹配RegEx和regex,但不匹配REGEX
如果打算進行一次不需要區分字母大小寫的匹配,不需要使用這個技巧,這種模式最適合用在全域性看需要區分字母大小寫,但在某個區域性不需要區分字母大小寫的搜尋操作中。
A-Z 匹配從A到Z的所有大寫字母
a-z 匹配從a到z的所有小寫字母
A-F 匹配從A到F的所有大寫字母
0-9 等價於 0123456789
#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f] 用來匹配 RGB值 如:#336633 #FFFFFF
在定義一個字元區間的時候,一定要避免讓這個區間的尾字元小於首字元 如: [3-1] 沒有意義還會讓整個模式失效
- (連字元) ,只能用在 [ 和 ] 之間。
3、取非匹配
除了那個字元集合裡的字元,其他字元都可以匹配。
如: [ns]a[^0-9] \.xls
^ 的效果將作用於給定字元集合中所有字元或字元區間,而不是僅限於緊跟在^字元後面的那一個字元或字元區間
4、匹配空白字元
[\b] 回退(並刪除)一個字元(Backspace)
\f 換頁符
\n 換行符
\r 回車符
\t 製表符(Tab鍵)
\v 垂直製表符
\r\n 匹配一個 “回車+換行” 組合 是 Windows所使用的文字行結束標籤
Unix和Linux系統只是用一個換行符來結束一個文字行 :\n
4、使用元字元
\d 任何一個數字字元 等價於 [0-9]
\D 任何一個非數字字元 等價於 [^0-9]
\w 任何一個字母數字字元(大小寫均可)或下劃線字元 等價於 [a-zA-Z0-9_]
\W 任何一個非字母數字或非下劃線字元 等價於 [^a-zA-Z0-9_]
\s 任何一個空白字元 等價於 [\f\n\r\t\v]
\S 任何一個非空白字元 等價於 [^\f\n\r\t\v]