前言

 seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 

一、緣起

1.

前面在字符編碼系列文章的前言中曾說過,類似于字符編碼這樣基礎(chǔ)、重要、應(yīng)用廣泛而又特別容易讓人困惑的主題還有字節(jié)序(即大小端表示)、正則表達(dá)式以及浮點數(shù)實現(xiàn)、日期時間處理等等。其中,字節(jié)序、正則表達(dá)式跟字符編碼的關(guān)系非常密切。字符編碼以及字節(jié)序的問題已經(jīng)在字符編碼系列文章中介紹過了,這個系列再來討論正則表達(dá)式。

不同于字符編碼,正則表達(dá)式目前市面上并不缺乏專業(yè)著作,比如那本被譽(yù)為正則表達(dá)式學(xué)習(xí)圣經(jīng)的《精通正則表達(dá)式》就很值得一讀,另外該書的譯者余晟先生所寫的《正則指引》也不錯;如果僅用于入門,則《正則表達(dá)式必知必會》肯定不能錯過,還有網(wǎng)上流傳極廣的《正則表達(dá)式30分鐘入門教程》也是不錯的入門資料。

但是,結(jié)合我自身痛苦的正則表達(dá)式學(xué)習(xí)經(jīng)歷和運用體會,僅有這些是遠(yuǎn)遠(yuǎn)不夠的。記得被大家稱之為“輪子哥”的大神級程序員vczh在知乎上說過,當(dāng)初被正則表達(dá)式虐得一氣之下,干脆自己寫了一個正則引擎(源碼托管在Github上),才算真正徹底搞懂正則表達(dá)式(于是被戲稱為“一言不合”就造輪子)。當(dāng)然不是每個程序員都能如此生猛,但即便都有這么生猛,似乎也沒必要都像“輪子哥”這樣真的自己都去再造一遍正則引擎的“輪子”。

那到底應(yīng)該怎樣才能最高性價比地掌握正則表達(dá)式這個神器呢?這正是我寫這個系列文章的目的。

2.

正則表達(dá)式,一聽就是個非常專業(yè)的術(shù)語,對于大多數(shù)人而言完全不知道這跟自己有啥關(guān)系。但事實上,只要是平時用Word寫點東西的人,都可能用得上。

沒錯,Word就支持正則表達(dá)式,雖然所支持的功能遠(yuǎn)遠(yuǎn)不如常規(guī)的正則表達(dá)式強(qiáng)大,語法上也有很大的不同,因而只能算得上是準(zhǔn)正則表達(dá)式或類正則表達(dá)式;但對我而言,只要是用Word寫文章,就已經(jīng)無法想象沒有正則表達(dá)式的情形了。

當(dāng)然,在Word中使用正則表達(dá)式,只能算是小試牛刀。正則表達(dá)式更大的用武之地在于各大常用高級編程語言、編輯器以及grep、sed和awk等命令行文本處理工具中,用以處理文本的查找、提取、替換、切分等操作。

3.

正則表達(dá)式是典型的那種沒用過的話,不覺得對自己有什么影響,可是一旦用過了,就再也回不去了的神器。當(dāng)然,我這里所說的“用過”,不是指簡單用用一些基本功能,而是指能夠熟練運用其基本功能和高級功能。用得越熟練,就會越驚嘆于其強(qiáng)大與神奇。

看到這里,我相信某些學(xué)過正則表達(dá)式、會使用一些基本功能的童鞋,心里或許在犯嘀咕了:神器是神器,可這玩意兒看起來就像天書一樣,也太難學(xué)、太難懂了,要達(dá)到熟練運用的程度,談何容易!短短的一個正則表達(dá)式,或許不到10個字符,其中的每個字符都認(rèn)識,但連在一起,卻越看越迷惑,越想越迷糊……

是的,正則表達(dá)式既然被捧上了神器級別的高度,自然是有著相當(dāng)強(qiáng)大的功能,這當(dāng)然就意味著其有非常深厚的內(nèi)涵,也就意味著有很多需要注意的細(xì)節(jié)。

4.

注意,我這里沒有說正則表達(dá)式是由于復(fù)雜而難以理解,這是因為,深厚的內(nèi)涵不等于復(fù)雜,細(xì)節(jié)很多不意味著難以理解??吹竭@里,或許有人有意見了,正則表達(dá)式還不算復(fù)雜?還不夠難理解?你秀智商呢還是秀優(yōu)越感吶?哦,相信我,其實這兩者我都不太沾邊。智商我也只是中等而已,否則早就不在這里碼字了;而優(yōu)越感則更提不上——既不高也不富更不帥,何來優(yōu)越感?!

其實,我真正想說的是,繁復(fù)或許是真的,雜亂倒未必。因此,簡單地說正則表達(dá)式復(fù)雜,似乎不夠準(zhǔn)確而客觀。正如跟一個牛叉而又性格獨特(廢話,真正牛叉的人基本上都有獨特的性格)的人打交道,關(guān)鍵不在于糾結(jié)其性格的獨特、脾氣的古怪,而是重在充分了解并理解其獨特的性格、古怪的脾氣,然后在此基礎(chǔ)上與他/她進(jìn)行良好的溝通,以便能好好發(fā)揮其牛叉之處。

5.

學(xué)習(xí)并熟練掌握正則表達(dá)式的過程也是如此——關(guān)鍵在于先要摸透其“性格”到底獨特在哪里,其“脾氣”又究竟古怪在何方。一旦摸清楚了其“性格”,其“脾氣”,學(xué)習(xí)起來就事半功倍了。

因此,我下面準(zhǔn)備從我自己的角度,先嘗試著來分析一下正則表達(dá)式那獨特的“性格”與古怪的“脾氣”,看看究竟為什么正則表達(dá)式給那么多人的感覺都是那么難以“親近”。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 

 

二、正則表達(dá)式為什么難學(xué)?

1.

對于正則表達(dá)式的分析和解讀,目前大多數(shù)文章和書籍多集中在正則表達(dá)式自身,比如對正則表達(dá)式的各個元字符、元轉(zhuǎn)義序列以及匹配原理的分析和解讀上。

當(dāng)然,這些自然也是很有必要的,而且是學(xué)習(xí)的主要內(nèi)容,是理解正則表達(dá)式所必需的。然而,很多人在看了大量這類文章和書籍之后,仍然覺得正則表達(dá)式很難看懂,不好理解,經(jīng)常有一種智商被碾壓的即視感。

2.

難道真的是正則表達(dá)式的學(xué)習(xí)者智商不夠嗎?其實,理解一個事物,都應(yīng)該有兩個維度,或者說兩個層面:一是,深入到該事物本身里面去理解;二是,跳出到該事物外面,站在更高的一個維度或?qū)用鎭砝斫狻?/span>

正如蘇軾那首著名的哲理詩《題西林壁》所說的,“不識廬山真面目,只緣身在此山中”。很多時候往往是這樣,當(dāng)你只從該事物本身來看的話,就如在云里霧里,是遠(yuǎn)遠(yuǎn)不夠的;而一旦跳出到該事物之外,站在更高的一個角度來看,則又正如王安石的《登飛來峰》中所說:“不畏浮云遮望眼,只緣身在最高層”。

3.

對正則表達(dá)式而言,前者正是目前大多數(shù)文章和書籍在做的;而后者,卻很少有文章和書籍能夠跳出正則表達(dá)式,站在更高的維度或?qū)用鎭矸治龊徒庾x正則表達(dá)式。這里就包括了被譽(yù)為正則表達(dá)式學(xué)習(xí)圣經(jīng)的《精通正則表達(dá)式》,以及該書的譯者余晟先生所著的《正則指引》兩書。

這里需要特別強(qiáng)調(diào)一下的是,我絕沒有貶低上述這兩本專業(yè)著作及其作者和/或譯者之意,而且恰恰相反,這兩本專著正是本系列文章的重要參考書。尤其無論是作為《精通正則表達(dá)式》的譯者,還是作為《正則指引》的著者,余晟先生都絕對稱得上是既專業(yè)又嚴(yán)謹(jǐn)。

4.

那么,前面所謂“更高的維度或?qū)用妗?,到底指的是什么呢?那就是,從編程語言發(fā)展史以及編程范式的角度來看正則表達(dá)式。什么?正則表達(dá)式竟然也算得上是一門正式的編程語言嗎?別急,請繼續(xù)往下看。

正則表達(dá)式有一個非常明顯的特點:高度簡潔、高度抽象。正則表達(dá)式中短短的幾個字符,或許就代表了一段復(fù)雜的處理邏輯和匹配算法。

5.

我們知道,程序代碼是對現(xiàn)實事務(wù)處理邏輯的抽象,而正則表達(dá)式則是對復(fù)雜的字符匹配程序代碼的進(jìn)一步抽象;也就是說,高度簡潔的正則表達(dá)式,可以認(rèn)為其背后所對應(yīng)的是字符匹配程序代碼,而字符匹配程序代碼,背后對應(yīng)的是字符匹配處理邏輯。

因此可以這么認(rèn)為,字符匹配處理邏輯,抽象為字符匹配程序代碼;字符匹配程序代碼,再進(jìn)一步抽象為高度簡潔的正則表達(dá)式。所以說,高度簡潔的正則表達(dá)式也是高度抽象的。

6.

事實上,從編程語言發(fā)展的角度來看,正則表達(dá)式也是一種編程語言,而且是屬于第4代語言(4GL)——面向問題語言(第1代語言為機(jī)器語言——由0和1組成的位串,第2代語言為匯編語言——用接近于英語單詞的助記碼mnemonic code來代替由0和1組成的位串,第3代語言為高級語言——用接近于自然語言的語法元素編寫程序,如C/C++、Java、C#、Perl、Python、PHP、JavaScript等語言,第4代語言為面向問題語言——用針對問題領(lǐng)域?qū)iT設(shè)計的語法元素編寫程序或表達(dá)式,如SQL、SAS、SPSS、LaTeX、Regex(即正則表達(dá)式)等,第5代語言為人工智能語言——Prolog、Mercury、OPS5等;不過,從第4代語言到第5代語言的演化還不是很清晰,目前學(xué)術(shù)界爭議較大,這里不作討論)。

注:這里強(qiáng)烈推薦鄭暉先生所著的《冒號課堂——編程范式與OOP思想》一書,該書既以宏觀視角,縱向?qū)徱暳司幊陶Z言發(fā)展簡史,橫向比較了各類編程語言的特點;又以微觀實踐,娓娓道來各編程范式的優(yōu)劣得失,更是深入探討了面向?qū)ο缶幊痰姆椒矫婷?,是不可多得的一本中文原?chuàng)計算機(jī)專著。這里是我在豆瓣寫的該書書評,供參考?!?/span>

 seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

第4代語言相對于第3代語言,更專注于其所應(yīng)用或者說其所適用的某個特定的業(yè)務(wù)邏輯和問題領(lǐng)域。程序員主要負(fù)責(zé)分析問題,以及使用第4代語言來描述問題,而無需花大量時間去考慮具體的處理邏輯和算法實現(xiàn)(事實上,最初之所以提出第4代語言的概念,就是希望非專業(yè)程序員也能做應(yīng)用開發(fā),雖然后來的發(fā)展事實證明并沒有很好地實現(xiàn)這一目的)。

7.

編程范式(Programming Paradigm)的角度上來講,第4代語言屬于聲明式編程范式,聲明式編程重在目標(biāo)而非過程、重在描述而非實現(xiàn),以聲明式語句直接描述問題,專注于問題的分析和表達(dá),而非專注于處理邏輯和算法實現(xiàn)過程,其具體的處理邏輯和算法實現(xiàn)是由語言解析引擎(編譯器或解釋器)來負(fù)責(zé)的。

當(dāng)然,這樣一來,這些由語言解析引擎實現(xiàn)的處理邏輯和具體算法其通用性就會較差,只能適用于某些特定業(yè)務(wù)或特定領(lǐng)域。也正是這個原因,第4代語言基本都是局限于某些特定領(lǐng)域的,多被認(rèn)為是領(lǐng)域特定語言DSL(Domain Specific Language)。

區(qū)別于算法實現(xiàn)可由程序員自由靈活設(shè)計的通用編程語言GPPL(General-Purpose Programming Language,作為第3代語言的高級語言基本上都屬于通用編程語言),領(lǐng)域特定語言DSL的算法基本上由語言解析引擎自動實現(xiàn),程序員靈活設(shè)計、自由發(fā)揮的空間很小,因此DSL幾乎沒有通用性(而且DSL大都是非圖靈完備的語言),只能專用于解決特定業(yè)務(wù)方向和業(yè)務(wù)領(lǐng)域的問題。

比如,SQL是專用于數(shù)據(jù)庫操作的語言、SAS和SPSS是專用于統(tǒng)計分析的語言、LaTeX是專用于排版的語言,而正則表達(dá)式Regex(Regular expression)則是專用于處理字符匹配的語言。

8.

理解了這一點,就比較容易理解正則表達(dá)式是字符匹配處理邏輯的抽象;更進(jìn)一步地來說,正則表達(dá)式中的某些元字符與特殊結(jié)構(gòu),可理解為某種具體的程序邏輯和算法的體現(xiàn)。

比如,正則表達(dá)式中的量詞*這一元字符,就是高級語言的處理邏輯“循環(huán)結(jié)構(gòu)”的體現(xiàn)(具體來說量詞*代表的是不定次數(shù)循環(huán)),而前后多個量詞的嵌套就是多層循環(huán)的嵌套;或運算符|這一元字符,就是高級語言的處理邏輯“選擇結(jié)構(gòu)”的體現(xiàn)。

而當(dāng)或運算符|出現(xiàn)在由量詞*所限定的圓括號中時,其實就是“循環(huán)結(jié)構(gòu)”中嵌套了“選擇結(jié)構(gòu)”;而如果進(jìn)一步地,“循環(huán)結(jié)構(gòu)”所嵌套的“選擇結(jié)構(gòu)”中的某個分支,又被某個量詞*所限定,那么則相當(dāng)于“循環(huán)結(jié)構(gòu)”所嵌套的“選擇結(jié)構(gòu)”又嵌套了“循環(huán)結(jié)構(gòu)”。

理解這一點非常重要,是快速、深入理解正則表達(dá)式的一把鑰匙、一條捷徑。站在編程語言發(fā)展史和編程范式的高度,再結(jié)合對正則表達(dá)式本身原理的深入理解,里外結(jié)合,高下相較,既登高望遠(yuǎn)、一覽眾山小,又洞幽燭微、復(fù)觀千水深,正則表達(dá)式的奧義,就能盡在掌握之中了。

9.

當(dāng)然,正則表達(dá)式之所以難學(xué)、難理解,除了由于正則表達(dá)式作為一個字符匹配領(lǐng)域的領(lǐng)域特定語言(DSL),具有高度簡潔、高度抽象的特點之外,大致上應(yīng)該還有以下幾個原因:

1)  學(xué)習(xí)者不求甚解,不了解正則引擎內(nèi)部的基本原理

作為正則表達(dá)式的使用者,不需要深入了解正則引擎內(nèi)部原理的技術(shù)實現(xiàn)細(xì)節(jié),那是正則引擎開發(fā)者更應(yīng)該了解的;但若完全不了解其基本工作原理和運行機(jī)制,也是不足取的。

2)  有多個多義元字符,特別容易使人混淆、迷亂

比如-、+、?、^,尤其是元字符?,既可以作為量詞表示其所限定的子表達(dá)式為可選(即匹配0次或1次),也可以置于量詞之后表示懶惰匹配,而且還有很多特殊分組結(jié)構(gòu)中用到它,比如(?<name>sub-regex)、(?:sub-regex)、(?>sub-regex)、(?=sub-regex)、(?!sub-regex)、(?<=sub-regex)、(?<!sub-regex)、(?|sub-regex)、(?modifier-modifier)、(?(condition)|)、(?R)、(?num)、(?#comment)等;還記得我自己當(dāng)初剛開始學(xué)習(xí)的時候,一看到正則表達(dá)式中的問號?,就有一種獨自在風(fēng)中凌亂的感覺。

3)  轉(zhuǎn)義也是難點

什么情況下需要轉(zhuǎn)義,什么情況下不需要轉(zhuǎn)義,貌似復(fù)雜得令人抓狂;當(dāng)然,其實是有一定的規(guī)律的,掌握了這些規(guī)律,再遇到轉(zhuǎn)義問題,就不至于心潮澎湃了。

4)  學(xué)習(xí)期望與學(xué)習(xí)方法不對

不應(yīng)該期望一次性記住、學(xué)會并熟練運用,正確的學(xué)習(xí)姿勢應(yīng)該是:先簡單入門,對一些基本的規(guī)則與元字符大致了解一遍,有個印象就好,在需要時再回過頭來看,不用刻意去強(qiáng)行記憶;然后接下來就應(yīng)該多練、多實踐、多運用,邊學(xué)、邊深入、邊熟練。

5)  有用于入門的好教程、備忘單,也有用于深入的大部頭專著,但卻缺乏好的速查手冊

由于需要邊學(xué)、邊深入、邊熟練,因此,平時手頭邊更需要的不是簡單的入門教程、備忘單(Cheat Sheet),也不僅僅是知識點分散于各處的大部頭專著(知識點分散導(dǎo)致查找起來不方便,用于深入學(xué)習(xí)原理是不錯,但不夠?qū)嵱?,而是一本按語法元素將知識點綜合在一起進(jìn)行編排的、在需要回過頭來看時能夠隨時快速翻查的速查手冊。這樣,在實踐運用中遇到問題就可方便隨時快速翻查,而這一點恰恰對于正則表達(dá)式這種不可能短期內(nèi)快速掌握并熟練運用的專業(yè)工具的學(xué)習(xí)與使用非常重要。

6)  沒有使用好的學(xué)習(xí)工具

你知道regex101.com、RegexBuddy、regexper.com等正則表達(dá)式的專業(yè)網(wǎng)站和專業(yè)工具嗎?這些堪稱學(xué)習(xí)正則表達(dá)式的神器,可令學(xué)習(xí)事半功倍,但很多人不知道,或知道但很少使用。

 seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 

三、關(guān)于本系列文章的編排設(shè)計

1.

本系列有關(guān)正則表達(dá)式的文章,出自于我自己在學(xué)習(xí)正則表達(dá)式的過程中所經(jīng)歷過的真切體會和真實痛點。因此,正如前面所述,采取的編排風(fēng)格類似于速查手冊。

但是要特別注意,這僅僅是出于邊用邊快速翻查的目的而作出的編排設(shè)計,不等于是通常大家所理解的那種簡單解釋一下概念,然后羅列一下功能,再加幾個示例的雞肋般“食之無味,棄之可惜”的字典式簡易手冊(這種簡易手冊僅供入門使用);更不是將元字符、元轉(zhuǎn)義序列、特殊結(jié)構(gòu)的簡單解釋編排在一張A4大小紙張上的備忘單(當(dāng)然,這種備忘單也并非沒有意義,至少通過一張A4大小的紙張就可快速了解正則表達(dá)式所支持的語法元素包括哪些,因此本系列文章也會提供幾份我收藏的備忘單供大家參考,但顯然也僅供入門使用)。

這也就是文章名稱中之所以特別強(qiáng)調(diào)“刨根究底”,而不是直接名之為速查手冊、快速參考之類的重要原因。

2.

因此,本系列文章與相關(guān)專著一樣,也同樣會涉及到正則引擎內(nèi)部的相關(guān)匹配原理與匹配機(jī)制的解釋(而且還獨創(chuàng)性地總結(jié)為了幾大原則,便于“以簡馭繁”、“提綱挈領(lǐng)”地快速掌握要領(lǐng)以便于記憶和理解),只是與其他專著用專門章節(jié)進(jìn)行介紹不同,而是各自糅合于對相關(guān)語法元素的解釋之中了。

這種為了便于快速翻查而沒有將匹配原理與匹配機(jī)制予以專章介紹的特殊編排,自然也有其缺點(比如,你可能會在不同的語法元素中發(fā)現(xiàn)類似的雷同解釋,這或許有重復(fù)啰嗦之嫌,但畢竟這符合我們的編排目的),但問題在于市面上進(jìn)行專章介紹的專著已經(jīng)有很多了,再重復(fù)它們意義不大;而專門針對前述的正則表達(dá)式學(xué)習(xí)和運用痛點的文章和專著則基本沒有,而這正是本系列文章的意義和目的所在。

3.

也因此,出于更偏向于實踐運用的目的,本系列文章不會花費過多的筆墨在DFA、NFA等過于深入的正則表達(dá)式幕后技術(shù)細(xì)節(jié)的講解上。

事實上,我認(rèn)為只要大致了解它們的基本原理與工作機(jī)制以及兩者之間在功能特性上的差異,就完全可以熟練掌握并運用正則表達(dá)式了,除非你是想自己開發(fā)一個正則引擎,實在沒必要過于陷入DFA、NFA等狀態(tài)機(jī)(自動機(jī))的實現(xiàn)細(xì)節(jié)上。

雖然前面曾提到過,“輪子哥”vczh為了徹底搞懂正則表達(dá)式,硬生生自己重新造了一個“輪子”。然而,要是為了學(xué)個正則表達(dá)式,都非要這樣重造輪子,既無可能,也實在沒有必要。

那么,真的在不重造輪子、不陷入DFA、NFA等技術(shù)細(xì)節(jié)的基礎(chǔ)上,也能搞懂正則表達(dá)式?

我自己的體會是,能!本系列文章就是我自己學(xué)習(xí)心得體會的總結(jié),文章中除滲透了前文所述的“里外結(jié)合,高下相較”這一相對“務(wù)虛”的基本思路之外,當(dāng)然也有相對“務(wù)實”的“干貨”——總結(jié)出來的八大原則(包括六大基本原則:最左原則、先到先得原則、最長原則、逐位置依次嘗試匹配原則、整體匹配優(yōu)先原則、占有匹配優(yōu)先原則;以及兩大衍生原則:最左先到先得原則、最左最長原則)、多角度立體的文字講解,以及大量圖示。

因此,我相信通過反復(fù)閱讀本系列文章,再多加練習(xí)、勤于實踐,然后在實際運用時再不斷回過頭來隨時翻看,應(yīng)該完全可以熟練掌握這個像毒品一樣會讓人用上癮的神器。

好了,牛皮吹過了,到底是騾子是馬,后面會拉出來遛遛……

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 

四、下面是正則表達(dá)式系列文章將會涉及到的內(nèi)容:

一)什么是正則表達(dá)式

二)為什么使用正則表達(dá)式

三)正則表達(dá)式簡史(含正則表達(dá)式流派簡介)

五)正則表達(dá)式基礎(chǔ)

六)八大原則簡介,包括:

六大基本原則:最左原則、先到先得原則、最長原則、逐位置依次嘗試匹配原則、整體匹配優(yōu)先原則、占有匹配優(yōu)先原則;

兩大衍生原則:最左先到先得原則、最左最長原則

七)元字符逐個詳解,包括:\、(、)、[、{、.、-、*、+、?、|、^、$,其中-、+、?、^為多義元字符

八)元轉(zhuǎn)義序列逐個詳解,包括:

固定字符:\a、\b(字符組內(nèi)部)、\e、\f、\n、\r、\t、\v(非Perl系)

字符組簡記:\d、\D、\h、\H、\N{}、\p{}與\pP、\P{}與\PP、\s、\S、\v(僅Perl系)、\V、\w、\W

進(jìn)制轉(zhuǎn)義字符:\octal-num(Perl系中也可寫作\o{octal-num})、\xhex-num(Perl系中也可寫作\x{hex-num})、\uhex-num(非Perl系,Ruby1.9+等個別語言中還可寫作\u{hex-num})

控制字符:\cX系列

錨點:\A、\z、\Z、\b(字符組外部)、\b{}、\B、\B{}、\G

引用:\num、\g{num}、\gnum、\k{name}、\k<name>、\k'name'

修飾:\E、\F、\l、\L、\Q、\u(僅Perl,不是僅Perl系)、\U

其他:\C、\K、\N、\R、\X、\<、\>

九)特殊構(gòu)造(特殊結(jié)構(gòu))逐個詳解,包括:

字符組、多選分支結(jié)構(gòu)、捕獲分組、命名捕獲分組、非捕獲分組、預(yù)查分組(即環(huán)視分組)、固化分組(即原子分組)、嵌入條件分組、內(nèi)聯(lián)選項與取消內(nèi)聯(lián)選項分組、注釋分組、分支復(fù)位分組、表達(dá)式引用分組、平衡分組等

十)匹配模式逐個詳解,包括:i、s、m、x、g等常用匹配模式

十一)POSIX字符組方括號表達(dá)式、排除型POSIX字符組方括號表達(dá)式

十二)字符組運算:字符組減法運算、字符組邏輯與運算

十三)正則表達(dá)式各語法元素優(yōu)先級

(未完待續(xù))

http://www.cnblogs.com/benbenalin/p/6926106.html