《正則表示式必知必會》-- 個人認為最好的RE入門書籍
《正則表示式必知必會》筆記
標籤(空格分隔): 正則表示式 筆記 RE regular expression
說明:
1)《正則表示式必知必會》是本人見過的最好的一本講解正則表示式的書籍,很適合初學者,書很薄,稍微有一點RE基礎的人,1-2個小時可以翻一遍;
2) 本文是針對書的簡略總結,方便自己查閱和對他人RE基礎知識的檢測。
3) 如果認為自己瞭解RE,可以直接下面內容進行檢測或回顧,若內容看不懂,建議直接看原書了,真的很薄的,能最快入手!!!
元字元:在RE中有特殊含義的字元。
- 匹配文字,如
.
- 空白元字元,如
[\b] \f \n \r \t \v
等 –> 回車換行(\r\n
- 空白元字元,如
- 語法要求,如
[]
元字元大寫和小寫一般表示相反的匹配
- 匹配文字,如
在字元集合中,一般的,像
.
+
這樣的元字元會被解釋為普通字元,不需要被轉義,但轉義也可以。即[\w.]
等同於[\w\.]
。匹配的重複次數
*
,?
,+
–> 分別匹配字元(或字符集)零個一個或多個,零個或一個,一個或多個{1,8}
,{3,}
,{3}
過度匹配 (實際中注意使用”懶惰型”的)
貪婪型元字元 懶惰型元字元 *
*?
+
+?
{3,}
{3,}?
位置匹配
\b
匹配單詞邊界,匹配一個位置,即一個\w
和\W
之間的位置(字母、數字、下劃線), 如\bhello\b
注:些支援
\<
\>
這些分別匹配單詞的開頭和結尾^
$
字串匹配分行匹配模式(multiline mode)–>將行分隔符當作一個字串分隔符對待–>
(?m)
必須出現在模式最前面注:有很多RE不支援這個
子表示式
將子表達是當作一個獨立元素使用
|
RE裡面的或操作符,如( ){2,}
,(19|20)\d{2}
注:
 
標識HTML文件中使用的非換行型空格,即non-breaking space可巢狀使用
回溯引用(backreference)
- 子表達可以在模式的內部被引用,即模式的後半部分可以引用前半部分定義的字表達式
查詢連續重複出現的單詞
[ ]+(\w+)[ ]+\1
注:回溯引用匹配通常是從1開始,
\0
表示匹配整個正則表示式;有的RE使用$
或者支援名字捕獲(named capture)常用在替換操作中,或將文字分為多個子表,進行排版優化
用來進行大小寫轉換的元字元,如
\E
\l
\L
\u
\U
\l \u
只能把下一個字元或子表達是轉換為小大寫,\L \U
則和\E
一起使用,作用於中間的字元
前後查詢
- lookahead & lookbehind, 即匹配但不cnsume
?=
或?<=
必須放在子表示式開頭,其中向前查詢的長度可變,向後查詢只能是固定的模式 <– 幾乎所有的RE都遵守這一規則- 前後查詢操作符,
(?=)
(?!)
(?<=)
(?<!)
,其中!
標識負向查詢 negative,如負向前查詢。 - 前後查詢結合起來,如
(?<=<[tT]>).*(?=\</[tT]>)
條件嵌入
- 並非所有RE實現都支援條件處理
用
?
匹配一個字元或表示式,如果它存在則執行後面的回溯引用條件,語法
(?(backreference)true-regex)
,在backreference存在時,true-regex才被執行注:
?(1)
是可以的,這裡不用反義,但?(\1)
往往也是可以的。前後查詢,只有在一個向前或向後查詢取得成功的情況下才才允許一個表示式被使用。將回溯引用條件中的編號–>一個完整的前後查詢表示式
如:
\d{5}(?(?=-)\d{4})
–>?(?=-)
僅起到一個判斷的作用,不消費
常用軟體
grep
引數-E -G -P
分別表示支援擴充套件、基本和Perl正則表示式,-o -v -c
分別表示只想檢視匹配結果,對匹配操作進行求非,只顯示匹配次數- Perl
m/pattern/
s/pattern/pattern/
qr/pattern
split()
- 限定符放在模式的後面,
\i
表示全域性搜尋,\g
表示全域性搜 - 回溯引用,$` 返回匹配字串前面所有的東西,$` 返回最後一個被匹配的子表示式,$& 返回整個被匹配字串: