1. 程式人生 > >正則表示式學習筆記(二)——簡單的正則表示式

正則表示式學習筆記(二)——簡單的正則表示式

一、簡單的正則表示式

注意:

在使用正則表示式的時候,會發現幾乎所有的問題都有不止一種解決方法。

有的比較簡單,有的比較快速,有的相容性很好,有的功能更全,同一個問題往往會有多種解決方案。

二、匹配單個字元

1、匹配純文字

直接輸入文字,就可以匹配。

如:

I am a boy.

輸入正則表示式   am

2、多個匹配結果

絕大多數正則表示式引擎的預設行為是隻返回第1個匹配結果,也有實現了一種能夠把所有的匹配結果全部找出的機制(通常返回一個數組或是其他的專用格式)。

3、字母的大小寫問題

絕大多數正則表示式都支援不區分字母大小寫的操作,強制執行一次不區分字母大小寫的搜尋。

4、匹配任意字元

. 字元(英文句號)可以匹配任何一個單個的字元。

注意:

通過DOS的檔案搜尋功能     正則表示式 . 字元相當於DOS的?字元

SQL中的 _ (下劃線) 字元   相當於正則表示式  .  字元

正則表示式可以用來匹配包含著字串內容的模式。

匹配的並不總是整個字串,而是與某個模式相匹配的字元——即使它們只是整個字串的一部分。

5、匹配特殊字元

如果模式裡需要一個  .  就要想辦法來告訴正則表示式,你需要的是 . 本身而不是它在正則表示式裡的特殊含義。

為此,必須在 .  的前面加上一個 \ (反斜槓)字元來對它進行轉義。

\ 是一個元字元

(metacharacter,表示“這個字元有特殊含義,而不是字元本身含義”)

注意:

如果需要搜尋 \  本身,就必須對字元進行轉義,相應的轉義序列是兩個來許的反斜槓字元 \\ .

在絕大多數的正則表示式實現裡, .  可以匹配除了換行符之外的任何單個字元。

三、匹配一組字元

1、匹配多個字元中的某一個

[ns]a.\.xls   匹配以[ns]開頭 : 這個集合匹配字元n或s(但不匹配其他字元)

注意:驗證某個模式能不能獲得預期的匹配結果並不困難,但如何驗證它不會匹配到你不想要的東西可就沒那麼簡單了。

[Rr]eg[Ee]x   可以匹配RegEx和regex,但不匹配REGEX

如果打算進行一次不需要區分字母大小寫的匹配,不需要使用這個技巧,這種模式最適合用在全域性看需要區分字母大小寫,但在某個區域性不需要區分字母大小寫的搜尋操作中。

2、利用字元集合區間

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]