隨著互聯(lián)網(wǎng)的迅速發(fā)展,幾乎所有工具軟件和程序語言都支持的正則表達(dá)式也變得越來越強(qiáng)大和易于使用。本書是講解正則表達(dá)式的經(jīng)典之作。本書主要講解了正則表達(dá)式的特性和流派、匹配原理、優(yōu)化原則、實用訣竅以及調(diào)校措施,并詳細(xì)介紹了正則表達(dá)式在Perl、Java、.NET、PHP中的用法。 本書自第1 版開始著力于教會讀者“以正則表達(dá)式來思考”,來讓讀者真正“精通”正則表達(dá)式。該版對PHP的相關(guān)內(nèi)容、Java1.5和Java1.6的新特性作了可觀的擴(kuò)充講解。任何有機(jī)會使用正則表達(dá)式的讀者都會從中獲益匪淺。
目錄: 前言 第1章正則表達(dá)式入門 解決實際問題 作為編程語言的正則表達(dá)式 以文件名做類比 以語言做類比 正則表達(dá)式的思維框架 對于有部分經(jīng)驗的讀者 檢索文本文件:Egrep Egrep元字符 行的起始和結(jié)束 字符組 用點號匹配任意字符 多選結(jié)構(gòu) 忽略大小寫 單詞分界符 小結(jié) 可選項元素 其他量詞:重復(fù)出現(xiàn) 括號及反向引用 神奇的轉(zhuǎn)義 基礎(chǔ)知識拓展 語言的差異 正則表達(dá)式的目標(biāo) 更多的例子 正則表達(dá)式術(shù)語匯總 改進(jìn)現(xiàn)狀 總結(jié) 一家之言 第2章入門示例拓展 關(guān)于這些例子 Perl簡單入門 使用正則表達(dá)式匹配文本 向?qū)嵱玫某绦蚯斑M(jìn) 成功匹配的副作用 錯綜復(fù)雜的正則表達(dá)式 暫停片刻 使用正則表達(dá)式修改文本 例子:公函生成程序 舉例:修整股票價格 自動的編輯操作 處理郵件的小工具 用環(huán)視功能為數(shù)值添加逗號 Text-to-HTML轉(zhuǎn)換 回到單詞重復(fù)問題 第3章正則表達(dá)式的特性和流派概覽 在正則的世界中漫步 正則表達(dá)式的起源 最初印象 正則表達(dá)式的注意事項和處理方式 集成式處理 程序式處理和面向?qū)ο笫教幚?br/> 查找和替換 其他語言中的查找和替換 注意事項和處理方式:小結(jié) 字符串,字符編碼和匹配模式 作為正則表達(dá)式的字符串 字符編碼 Unicode 正則模式和匹配模式 常用的元字符和特性 字符表示法 字符組及相關(guān)結(jié)構(gòu) 錨點及其他“零長度斷言” 注釋和模式量詞 分組,捕獲,條件判斷和控制 高級話題引導(dǎo) 第4章:表達(dá)式的匹配原理 發(fā)動引擎 兩類引擎 新的標(biāo)準(zhǔn) 正則引擎的分類 幾句題外話 測試引擎的類型 匹配的基礎(chǔ) 關(guān)于范例 規(guī)則1:優(yōu)先選擇最左端的匹配結(jié)果 引擎的構(gòu)造 規(guī)則2:標(biāo)準(zhǔn)量詞是匹配優(yōu)先的 表達(dá)式主導(dǎo)與文本主導(dǎo) NFA引擎:表達(dá)式主導(dǎo) DFA引擎:文本主導(dǎo) 第一想法:比較NFA與DFA 回溯 真實世界中的例子:面包屑 回溯的兩個要點 備用狀態(tài) 回溯與匹配優(yōu)先 關(guān)于匹配優(yōu)先和回溯的更多內(nèi)容 匹配優(yōu)先的問題 多字符“引文” 使用忽略優(yōu)先量詞 匹配優(yōu)先和忽略優(yōu)先都期望獲得匹配 匹配優(yōu)先、忽略優(yōu)先和回溯的要旨 占有優(yōu)先量詞和固化分組 占有優(yōu)先量詞,?+、*+、++和{m,n}+ 環(huán)視的回溯 多選結(jié)構(gòu)也是匹配優(yōu)先的嗎 發(fā)掘有序多選結(jié)構(gòu)的價值 NFA、DFA和POSIX 最左最長規(guī)則 POSIX和最左最長規(guī)則 速度和效率 小結(jié):NFA與DFA的比較 總結(jié) 第5章:正則表達(dá)式實用技巧 正則表達(dá)式的平衡法則 若干簡單的例子 匹配連續(xù)行(續(xù)前) 匹配IP地址 處理文件名 匹配對稱的括號 防備不期望的匹配 匹配分隔符之內(nèi)的文本 了解數(shù)據(jù),做出假設(shè) 去除文本首尾的空白字符 HTML相關(guān)范例 匹配HTMLTag 匹配HTMLLink 檢查HTTPURL 驗證主機(jī)名 在真實世界中提取URL 擴(kuò)展的例子 保持?jǐn)?shù)據(jù)的協(xié)調(diào)性 解析CSV文件 第6章:打造高效正則表達(dá)式 典型示例 稍加修改——先邁最好使的腿 效率vs準(zhǔn)確性 繼續(xù)前進(jìn)——限制匹配優(yōu)先的作用范圍 實測 全面考查回溯 POSIXNFA需要更多處理 無法匹配時必須進(jìn)行的工作 看清楚一點 多選結(jié)構(gòu)的代價可能很高 性能測試 理解測量對象 PHP測試 Java測試 VB.NET測試 Ruby測試 Python測試 Tcl測試 常見優(yōu)化措施 有得必有失 優(yōu)化各有不同 正則表達(dá)式的應(yīng)用原理 應(yīng)用之前的優(yōu)化措施 通過傳動裝置進(jìn)行優(yōu)化 優(yōu)化正則表達(dá)式本身 提高表達(dá)式速度的訣竅 常識性優(yōu)化 將文字文本獨立出來 將錨點獨立出來 忽略優(yōu)先還是匹配優(yōu)先?具體情況具體分析 拆分正則表達(dá)式 模擬開頭字符識別 使用固化分組和占有優(yōu)先量詞 主導(dǎo)引擎的匹配 消除循環(huán) 方法1:依據(jù)經(jīng)驗構(gòu)建正則表達(dá)式 真正的“消除循環(huán)”解法 方法2:自頂向下的視角 方法3:匹配主機(jī)名 觀察 使用固化分組和占有優(yōu)先量詞 簡單的消除循環(huán)的例子 消除C語言注釋匹配的循環(huán) 流暢運轉(zhuǎn)的表達(dá)式 引導(dǎo)匹配的工具 引導(dǎo)良好的正則表達(dá)式速度很快完工 總結(jié):開動你的大腦 第7章:Perl 作為語言組件的正則表達(dá)式 Perl的長處 Perl的短處 Perl的正則流派 正則運算符和正則文字 正則文字的解析方式 正則修飾符 正則表達(dá)式相關(guān)的Perl教義 表達(dá)式應(yīng)用場合 動態(tài)作用域及正則匹配效應(yīng) 匹配修改的特殊變量 qr//運算符與regex對象 構(gòu)建和使用regex對象 探究regex對象 用regex對象提高效率 Match運算符 Match的正則運算元 指定目標(biāo)運算元 Match運算符的不同用途 迭代匹配:ScalarContext,不使用/g Match運算符與環(huán)境的關(guān)系 Substitution運算符 運算元replacement /e修飾符 應(yīng)用場合與返回值 Split運算符 Split基礎(chǔ)知識 返回空元素 Split中的特殊Regex運算元 Split中帶捕獲型括號的match運算元 巧用Perl的專有特性 用動態(tài)正則表達(dá)式結(jié)構(gòu)匹配嵌套結(jié)構(gòu) 使用內(nèi)嵌代碼結(jié)構(gòu) 在內(nèi)嵌代碼結(jié)構(gòu)中使用local函數(shù) 關(guān)于內(nèi)嵌代碼和my變量的忠告 使用內(nèi)嵌代碼匹配嵌套結(jié)構(gòu) 正則文字重載 正則文字重載的問題 模擬命名捕獲 效率 辦法不只一種 表達(dá)式編譯、/o修飾符、qr/···/和效率 理解“原文”副本 Study函數(shù) 性能測試 正則表達(dá)式調(diào)試信息 結(jié)語 第8章:Java Java的正則流派 Java對\p{}和\P{}的支持 Unicode行終結(jié)符 使用java.util.regex ThePattern.compile()Factory Pattern的matcher方法 Matcher對象 應(yīng)用正則表達(dá)式 查詢匹配結(jié)果 簡單查找-替換 高級查找-替換 原地查找-替換 Matcher的檢索范圍 方法鏈 構(gòu)建掃描程序 Matcher的其他方法 Pattern的其他方法 Pattern的split方法,單個參數(shù) Pattern的split方法,兩個參數(shù) 拓展示例 為ImageTag添加寬度和高度屬性 對于每個Matcher,使用多個Pattern校驗HTML 解析CSV文檔 Java版本差異 1.4.2 和1.5.0之間的差異 1.5.0和1.6 之間的差異 第9章:.NET .NET的正則流派 對于流派的補(bǔ)充 使用.NET正則表達(dá)式 正則表達(dá)式快速入門 包概覽 核心對象概覽 核心對象詳解 創(chuàng)建Regex對象 使用Regex對象 使用Match對象 使用Group對象 靜態(tài)“便捷”函數(shù) 正則表達(dá)式緩存 輔助函數(shù) .NET高級話題 正則表達(dá)式裝配件 匹配嵌套結(jié)構(gòu) Capture對象 第10章:PHP PHP的正則流派 Preg函數(shù)接口 “Pattern”參數(shù) Preg函數(shù)羅列 preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_grep preg_quote “缺失”的preg函數(shù) preg_regex_to_pattern 對未知的Pattern參數(shù)進(jìn)行語法檢查 對未知正則表達(dá)式進(jìn)行語法檢查 遞歸的正則表達(dá)式 匹配嵌套括號內(nèi)的文本 不能回溯到遞歸調(diào)用之內(nèi) 匹配一組嵌套的括號 PHP效率 模式修飾符S:“研究” 擴(kuò)展示例 用PHP解析CSV 檢查taggeddata的嵌套正確性 索引
|