內容簡介
隨著網際網路的迅速發展,幾乎所有工具軟體和程式語言都支持的正則表達式也變得越來越強大和易於使用。《精通正則表達式(第3版)》是講解正則表達式的經典之作。《精通正則表達式(第3版)》主要講解了正則表達式的特性和流派、匹配原理、最佳化原則、實用訣竅以及調校措施,並詳細介紹了在Perl、Java、.NET、PHP中正則表達式的用法。
《精通正則表達式(第3版)》自第1版開始著力於教會讀者 “以正則表達式來思考”,來讓讀者真正“精通”正則表達式。該版對PHP的相關內容、Java1.5和Java1.6的新特性作了可觀的擴充講解。任何有機會使用正則表達式的讀者都將因《精通正則表達式(第3版)》而受益匪淺。
編輯推薦
《精通正則表達式(第3版)》講解正則表達式,這種工具能夠提高工作效率、讓生活變得更輕鬆。精心調校後的正則表達式只需要十多秒就能完成以前數小時才能完成的枯燥任務。如今,正則表達式已經成為眾多語言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB-NET和c#(以及.NETFramework中的任何語言)——中的標準特性,依靠它,你能以之前完全不敢構想的方式進行複雜而精巧的文本處理。十年三版,再顯王者風範,近30年開發經驗的智慧結晶,深入理解正則表達式,徹底修煉基本功,全球第一本全面深入講解正則表達式的經典巨著,《程式設計師》雜誌技術主編孟岩鼎力推薦。
專家點評:《精通正則表達式》是系統學習正則表達式的唯一最權威著作。任何時候,任何地方,只要提到正則表達式著作,人們都會提到這本書。該書質量之高,聲譽之盛,使得幾乎沒有人企圖挑戰它的地位,從而在正則表達式圖書領域形成了獨特的“一夫當關”的局面,稱其為正則表達式聖經,絕對當之無愧。
——《程式設計師》雜誌技術主編孟岩
《精通正則表達式(第3版)》包含了對PHP及其正則表達式的講解。這一版的更新也反映了其他語言的發展,深入講解了Sun的java.util.regex,並特別提到了Java1.4.2和Java1.5/1.6之間的眾多差異。
本書的內容:
·各種語言和工具的功能比較
·正則引擎的工作原理
·最佳化(能節省大量的時間)
·準確匹配期望的文本
·針對具體語言的章節
《精通正則表達式(第3版)》,以明晰輕鬆的筆調向程式設計師深入淺出地講解複雜的知識,並給出了現實世界中複雜問題的解決辦法,讀者能夠立刻運用書中豐富的知識,巧妙而高效地解決各種問題。
作者簡介
作者:(美國)佛瑞德(Friedl.J.E.F) 譯者:余晟
Jeffrey E.F.Friedl生長於俄亥俄州Rootstown的鄉村,小時候希望成為天文學家,直到有一天他發現了閒置在化學實驗室角落裡的TRS-80 Model I(裝備了整整16KB RAM)。1980年他終於開始使用Unix(和正則表達式)。在肯特(Kent)大學和新罕布夏(New Hampshire)大學分別獲得計算機學士和碩士學位之後,他在日本京都工作了8年,為歐姆龍公司(Omron Corporation)進行核心開發,1997年遷居矽谷,在當時還不為人知的Yahoo!用正則表達式處理財經新聞和數據。2004年4月他偕妻兒返回京都。
Friedl的閒暇時間很充裕,這時候他喜歡與妻子Fumie和3歲的活蹦亂跳的兒子Anthony一起。他還喜歡拍攝遍布京都的美景,照片在他的blog上:http://regex-info/blog。
目錄
前言
第1章正則表達式入門
解決實際問題
作為程式語言的正則表達式
以檔案名稱做類比
以語言做類比
正則表達式的思維框架
對於有部分經驗的讀者
檢索文本檔案:Egrep
Egrep元字元
行的起始和結束
字元組
用點號匹配任意字元
多選結構
忽略大小寫
單詞分界符
小結
可選項元素
其他量詞:重複出現
括弧及反向引用
神奇的轉義
基礎知識拓展
語言的差異
正則表達式的目標
更多的例子
正則表達式術語彙總
改進現狀
總結
一家之言
第2章入門示例拓展
關於這些例子
Perl簡單入門
使用正則表達式匹配文本
向實用的程式前進
成功匹配的副作用
錯綜複雜的正則表達式
暫停片刻
使用正則表達式修改文本
例子:公函生成程式
舉例:修整股票價格
自動的編輯操作
處理郵件的小工具
用環視功能為數值添加逗號
Text-to-HTML轉換
回到單詞重複問題
第3章正則表達式的特性和流派概覽
在正則的世界中漫步
正則表達式的起源
最初印象
正則表達式的注意事項和處理方式
集成式處理
程式式處理和面向對象式處理
查找和替換
其他語言中的查找和替換
注意事項和處理方式:小結
字元串,字元編碼和匹配模式
作為正則表達式的字元串
字元編碼
Unicode
正則模式和匹配模式
常用的元字元和特性
字元表示法
字元組及相關結構
錨點及其他“零長度斷言”
注釋和模式量詞
分組,捕獲,條件判斷和控制
高級話題引導
第4章:表達式的匹配原理
發動引擎
兩類引擎
新的標準
正則引擎的分類
幾句題外話
測試引擎的類型
匹配的基礎
關於範例
規則1:優先選擇最左端的匹配結果
引擎的構造
規則2:標準量詞是匹配優先的
表達式主導與文本主導
NFA引擎:表達式主導
DFA引擎:文本主導
第一想法:比較NFA與DFA
回溯
真實世界中的例子:麵包屑
回溯的兩個要點
備用狀態
回溯與匹配優先
關於匹配優先和回溯的更多內容
匹配優先的問題
多字元“引文”
使用忽略優先量詞
匹配優先和忽略優先都期望獲得匹配
匹配優先、忽略優先和回溯的要旨
占有優先量詞和固化分組
占有優先量詞,?+、*+、++和{m,n}+
環視的回溯
多選結構也是匹配優先的嗎
發掘有序多選結構的價值
NFA、DFA和POSIX
最左最長規則
POSIX和最左最長規則
速度和效率
小結:NFA與DFA的比較
總結
第5章:正則表達式實用技巧
正則表達式的平衡法則
若干簡單的例子
匹配連續行(續前)
匹配IP位址
處理檔案名稱
匹配對稱的括弧
防備不期望的匹配
匹配分隔設定之內的文本
了解數據,做出假設
去除文本首尾的空白字元
HTML相關範例
匹配HTMLTag
匹配HTMLLink
檢查HTTPURL
驗證主機名
在真實世界中提取URL
擴展的例子
保持數據的協調性
解析CSV檔案
第6章:打造高效正則表達式
典型示例
稍加修改——先邁最好使的腿
效率vs準確性
繼續前進——限制匹配優先的作用範圍
實測
全面考查回溯
POSIXNFA需要更多處理
無法匹配時必須進行的工作
看清楚一點
多選結構的代價可能很高
性能測試
理解測量對象
PHP測試
Java測試
VB-NET測試
Ruby測試
Python測試
Tcl測試
常見最佳化措施
有得必有失
最佳化各有不同
正則表達式的套用原理
套用之前的最佳化措施
通過傳動裝置進行最佳化
最佳化正則表達式本身
提高表達式速度的訣竅
常識性最佳化
將文字文本獨立出來
將錨點獨立出來
忽略優先還是匹配優先?具體情況具體分析
拆分正則表達式
模擬開頭字元識別
使用固化分組和占有優先量詞
主導引擎的匹配
消除循環
方法1:依據經驗構建正則表達式
真正的“消除循環”解法
方法2:自頂向下的視角
方法3:匹配主機名
觀察
使用固化分組和占有優先量詞
簡單的消除循環的例子
消除C語言注釋匹配的循環
流暢運轉的表達式
引導匹配的工具
引導良好的正則表達式速度很快完工
總結:開動你的大腦
第7章:Perl
作為語言組件的正則表達式
Perl的長處
Perl的短處
Perl的正則流派
正則運算符和正則文字
正則文字的解析方式
正則修飾符
正則表達式相關的Perl教義
表達式套用場合
動態作用域及正則匹配效應
匹配修改的特殊變數
qr//運算符與regex對象
構建和使用regex對象
探究regex對象
用regex對象提高效率
Match運算符
Match的正則運算元
指定目標運算元
Match運算符的不同用途
疊代匹配:ScalarContext,不使用/g
Match運算符與環境的關係
Substitution運算符
運算元replacement
/e修飾符
套用場合與返回值
Split運算符
Split基礎知識
返回空元素
Split中的特殊Regex運算元
Split中帶捕獲型括弧的match運算元
巧用Perl的專有特性
用動態正則表達式結構匹配嵌套結構
使用內嵌代碼結構
在內嵌代碼結構中使用local函式
關於內嵌代碼和my變數的忠告
使用內嵌代碼匹配嵌套結構
正則文字重載
正則文字重載的問題
模擬命名捕獲
效率
辦法不只一種
表達式編譯、/o修飾符、qr/···/和效率
理解“原文”副本
Study函式
性能測試
正則表達式調試信息
結語
第8章:Java
Java的正則流派
Java對\p{}和\P{}的支持
Unicode行終結符
使用java.util.regex
ThePattern.compile()Factory
Pattern的matcher方法
Matcher對象
套用正則表達式
查詢匹配結果
簡單查找-替換
高級查找-替換
原地查找-替換
Matcher的檢索範圍
方法鏈
構建掃描程式
Matcher的其他方法
Pattern的其他方法
Pattern的split方法,單個參數
Pattern的split方法,兩個參數
拓展示例
為ImageTag添加寬度和高度屬性
對於每個Matcher,使用多個Pattern校驗HTML
解析CSV文檔
Java版本差異
1.4.2 和1.5.0之間的差異
1.5.0和1.6 之間的差異
第9章:.NET
.NET的正則流派
對於流派的補充
使用.NET正則表達式
正則表達式快速入門
包概覽
核心對象概覽
核心對象詳解
創建Regex對象
使用Regex對象
使用Match對象
使用Group對象
靜態“便捷”函式
正則表達式快取
輔助函式
.NET高級話題
正則表達式裝配件
匹配嵌套結構
Capture對象
第10章:PHP
PHP的正則流派
Preg函式接口
“Pattern”參數
Preg函式羅列
preg_match
preg_match_all
preg_replace
preg_replace_callback
preg_split
preg_grep
preg_quote
“缺失”的preg函式
preg_regex_to_pattern
對未知的Pattern參數進行語法檢查
對未知正則表達式進行語法檢查
遞歸的正則表達式
匹配嵌套括弧內的文本
不能回溯到遞歸調用之內
匹配一組嵌套的括弧
PHP效率
模式修飾符S:“研究”
擴展示例
用PHP解析CSV
檢查taggeddata的嵌套正確性
索引