《正則表達式經典實例(第2版)》——導讀

前言
正則表達式在過去十多年間越來越普及。如今,所有常用的編程語言都會包含一個強大的正則表達式函數庫,甚至在語言本身就內嵌了對於正則表達式的支持。許多開發人員都會利用這些正則表達式的功能,在應用程序中為用戶提供使用正則表達式對其數據進行查找或者過濾的能力。正則表達式已經無處不在。
隨著正則表達式的廣泛采用,出現了許多相關的著作。其中大多數都很好地講解了正則表達式的語法,並且還會提供一些例子以及參考實現。然而,我們還沒有看到有任何一本書能夠針對處理計算機和不同因特網應用上的文本所遇到的各種實際問題為讀者提供基於正則表達式的解決方案。因此,本書作者Steve和Jan決定寫一本書來滿足這種需求。
我們特別希望能夠展現給讀者的是:如何使用正則表達式來解決那些正則表達式經驗有限的人認為無法解決的問題,或者軟件純粹主義者認為不能用正則表達式來解決的問題。因為如今正則表達式已無處不在,所以它們通常可以作為便利的工具被最終用戶直接使用,而不需要程序員團隊的參與。即使是對程序員來說,常常也可以在信息檢索和修改的任務中采用一些正則表達式來節省大量時間,因為這些功能如果使用過程式代碼來實現,可能會需要幾小時甚至幾天的時間,也可能會由於需要采用第三方的函數庫,而不得不經過事先審查和管理人員的審批。
與IT業界流行的東西一樣,正則表達式也擁有許多種不同的實現,以及不同程度的兼容性。這就出現了許多不同的正則表達式流派(flavor),它們在處理一個特定正則表達式的時候並不總是擁有完全一樣的表現,有時候甚至會無法正常工作。
在許多書中的確也提到了目前存在的不同流派,並且指出了其中的一些區別。但是,它們通常會選擇在不同地方略掉一些流派—特別是當某種流派缺少特定功能的時候,而不是為之提供替代解決方案或者變通方法。而當需要在不同的應用程序或編程語言中使用不一樣的正則表達式流派的時候,就會令人感到沮喪。
在文字方麵,也常常可以看到一些不嚴格的表達,例如“所有人現在都在使用Perl風格的正則表達式”,但是這種說法輕視了大範圍的不兼容。即使都是“Perl風格”的函數庫也有顯著的區別,而與此同時Perl也在持續不斷地發展。過度簡單化的印象可能會導致程序員浪費半小時的時間來運行調試器卻得不到任何結果,而不是去認真檢查他們的正則表達式的實現細節。甚至當他們發現所依賴的一些功能不存在的時候,都不知道該如何找到變通方法。
NET、Java、JavaScript、PCRE、Perl、Python以及Ruby,這些不隻是一些用在封麵上的熱門詞匯,它們是本書要講到的7種正則表達式流派。我們把這7種流派等同對待,同時還會特別仔細地指出這些正則表達式流派中我們所能找到的所有不一致的地方。
關於編程的一章(第3章)中包含如下語言的代碼示例:C#、Java、JavaScript、PHP、Perl、Python、Ruby以及VB.NET。同樣,每一個實例都有這8種語言的解決方案和解釋。雖然這樣做會讓這一章看起來有些囉唆,但是讀者可以很輕鬆地跳過那些不感興趣的語言的討論,而不會錯過所選用語言中應當知道的任何內容。
目錄
第 1 章 正則表達式簡介
1.1 正則表達式的定義
1.1.1 眾多正則表達式流派
1.1.2 本書涵蓋的正則流派
1.2 使用正則表達式進行查找和替換
1.3 正則表達式工具
1.3.1 RegexBuddy
1.3.2 RegexPal
1.3.3 RegexMagic
1.3.4 更多正則表達式在線測試工具
1.3.5 更多桌麵正則表達式測試工具
1.3.6 grep
1.3.7 常見的文本編輯器
第 2 章 正則表達式的基本技能
2.1 匹配字麵文本
2.2 匹配不可打印字符
2.3 匹配多個字符之一
2.4 匹配任意字符
2.5 匹配文本行起始和或文本行結尾
2.6 匹配完整單詞
2.7 Unicode碼位、類別、區塊和字母表
2.8 匹配多個選擇分支之一
2.9 分組和捕獲匹配中的子串
2.10 再次匹配先前匹配的文本
2.11 捕獲和命名匹配子串
2.12 把正則表達式的一部分重複多次
2.13 選擇最小或最大重複次數
2.14 消除不必要的回溯
2.15 避免失控重複
2.16 測試一個匹配,但不添加到整體匹配中
2.17 根據條件匹配兩者之一
2.18 向正則表達式中添加注釋
2.19 在替代文本中添加字麵文本
2.20 在替代文本中添加正則匹配
2.21 把部分的正則匹配添加到替代文本中
2.22 把匹配上下文插入到替代文本中
最後更新:2017-06-06 07:35:49