本書關注的是一種強大的工具——「正則表達式」。它將教會讀者如何使用正則表達式解決各類問題,以及如何充分使用支持正則表達式的工具和語言。許多關於正則表達式的文檔都沒有介紹這種工具的能力,而本書的目的正是讓讀者「精通」正則表達式。許多種工具都支持正則表達式(文本編輯器、文字處理軟件、系統工具、數據庫引擎,等等),不過,要想充分挖掘正則表達式的能力,仍是應當將它做爲編輯語言的一部分。例如Java、JScript、VisualBasic、VBScript、JavaScript、ECMAScript、C、C++、C#、elisp、Perl、Python、Tcl、Ruby、PHP、sed和awk。事實上,在一些用上述語言編寫的程序中,正則表達式扮演了極其重要的角色。正則表達式可以獲得衆多語言和工具的支持是有緣由的:它們極其有用。從較低的層面上來講,正則表達式描述的是一串文本(achunkoftext)的特徵。讀者能夠用它來驗證用戶輸入的數據,或者也能夠用它來檢索大量的文本。從較高的層面上來講,正則表達式允許用戶掌控他們本身的數據——控制這些數據,讓他們爲本身服務。掌握正則表達式,就是掌握本身的數據。
——來自本書序言正則表達式
本篇寫的是正則表達式入門的內容,包括元字符及其相關術語,以及一些簡單的語言差別。數據庫
字符^是脫字符,能夠錨定一行文本的開頭;字符$是美圓符,能夠錨定一行文本的結束.注意,這裏匹配的都是位置,而不是字符或者內容。編輯器
字符組是指用方括號包圍起來的字符,相似[...]。匹配的內容是是一個字符1。要注意的是,字符組內部也有元字符,且字符組外部的元字符在字符組內部無心義。工具
-是連字符,在字符組的兩個字符中間能夠表示一個範圍,如[1-6]能夠表示[123456]。在字符組中,若是要匹配連字符,最好放在最前面2。ip
^放在字符組開頭,則成爲一個排除型字符組,會匹配除了排除型字符組中全部字符的字符。文檔
.(dot)能夠匹配任意字符(除了.自身)。要注意的是,這個.可能被濫用,最好在使用前考慮清楚:檢索的文本是否會對錶達式形成干擾?是否都是固定格式?字符串
能夠用|來表示或。這個元字符能夠把多個子表達式組合起來,只要求匹配其中一個便可。這時,子表達式又稱做「多選分支」(alternative)。入門
因爲字符組只能匹配單個字符,而多選結構則能夠匹配字符串,彌補了它的缺陷。table
在Python中,使用參數i打開。在英文中,常常出現這中須要。而忽略大小寫就能夠避免某些人因爲打錯字或者對單詞的不熟悉致使的問題。class
在Python中,使用\b做爲其分界符。
在egrep中,使用<\\>來作分界符。
分界符能夠對單詞的起始和結束位置進行檢查,而不至於將一個單詞從另外一個單詞中分離。
?在一個字符或者分組後面,意爲着其匹配的內容容許出現,可是不出現也沒問題。
*、+和?的位置相同,其實是對其匹配內容出現的次數作一個限定。
+:要求匹配的內容出現一次及以上。
*:要求匹配的內容出現0次及以上3。
若是須要指定出現的次數,可使用{m,n},匹配內容m次到n次。
若是須要使用分組,或者對一個分組進行量詞限定,就可使用它了。使用括號之後,能夠:
在後面進行反向引用
做爲一個子表達式使用
限制多選結構
對正則表達式的元字符進行轉義,實際上就是加一個\實現。好比\(\)就是指一個括號,而不是一個分組。
元字符 | 名稱 | 功能 |
---|---|---|
. | 點 | 匹配單個任意字符 |
[...] | 字符組 | 匹配單個字符組出現的字符 |
[^...] | 排除型字符組 | 匹配單個未在字符組出現的字符 |
\char | 轉義符 | 若是char是元字符或沒有特殊含義, 則匹配char。 |
? | 問號 | 允許非必須的一次匹配 |
+ | 加號 | 匹配1次以上 |
* | 星號 | 匹配任意次 |
{min,max} | 區間量詞 | 匹配min次到max次。 |
^$ | 脫字符和美圓符 | 匹配一行文本的開頭和結束。 |
\b | 邊界符 | 匹配單詞的邊界 |
| | | | 多選結構 |
(...) | 括號 | 用處有三,請看上面 |
\1.\2 | 反向引用 | 對括號捕捉到的分組進行引用。 |