精通正則表達式(第3版)

精通正則表達式(第3版)

《精通正則表達式(第3版)》主要講解了正則表達式的特性和流派、匹配原理、最佳化原則、實用訣竅以及調校措施,並詳細介紹了在Perl、Java、.NET、PHP中正則表達式的用法。

內容簡介

隨著網際網路的迅速發展,幾乎所有工具軟體和程式語言都支持的正則表達式也變得越來越強大和易於使用。《精通正則表達式(第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的嵌套正確性

索引

相關詞條

熱門詞條

聯絡我們