讀古今文學網 > 精通正則表達式(第3版) > 第7章 Perl >

第7章 Perl

Perl

Perl在本書中的份量很重,這樣安排有充分的理由。Perl很流行,提供的正則表達式特性很豐富,容易下載到,也很容易入門,而且在Windows、Unix和Mac等各種平台上都有提供。

Perl的某些程序結構看上去類似C和其他傳統編程語言,但也只是看上去像而已。Perl解決問題的方式——Perl之道(The Perl Way)——是不同於傳統語言的。Perl程序的設計通常使用傳統的結構化和面向對象的概念,但是數據處理通常嚴重依賴正則表達式。我認為完全可以這麼說:正則表達式在所有的Perl程序中都不可或缺。無論這個程序是100 000行,還是一行:

%perl-pi-e's{([-+]?\d+(\.\d*)?)F\b}{sprintf 〞%.0fC〞,($1-32)*5/9}eg'*.txt這個程序檢查所有的.txt文件,將其中的華氏溫度轉換為攝氏溫度(還記得第2 章開頭的例子嗎)。

本章內容

本章講解Perl的正則表達式的方方面面(注1),包括正則流派的細節,和使用正則表達式的運算符。本章從基礎開始介紹相關的細節,但我還是假設讀者對 Perl 有基本的理解(如果你看過第2章,看本章就沒多大問題)。那些沒有詳細講解的細節,我會一筆帶過,也不會費工夫來講解語言中與正則表達式不相關的細節。在手邊準備一本 Perl 的文檔會很有幫助,或者O』Reilly的Programming Perl也行。

即使你目前對 Perl 還不夠瞭解也不要緊,重要的是要有進一步學習的慾望。從任何方面來說,閱讀本章都不是件輕鬆的事情。我的目的不是帶讀者入門,而是教給讀者其他 Perl 的書中沒提供的有用知識:為了保持本章內容的整體性和連貫性,我不會忽略一些重要的細節。某些問題很複雜,細節很多,如果不能馬上理解也不必擔心。我推薦讀者第一遍閱讀時只要瞭解全面的圖景,需要的時候再返過來查閱。

下面列出了本章的結構作為指導:

●「Perl 的正則流派」(☞286)考察了Perl 的正則表達式提供的豐富的元字符,以及正則文字提供的附加特性。

●「正則相關的 Perl 教義(Perlism)」(☞293)考察了在 Perl 中使用正則表達式的一些重要問題。詳細介紹了「動態作用域(dynamic scoping)」和「表達式應用場合(expression context)」,並解釋了它們與正則表達式之間的緊密聯繫。

●正則表達式必須與應用方式結合起來才有價值,所以下面各節講解了Perl中神奇的正則表達式控制結構:

qr/…/運算符和Regex對像(☞303)

Match運算符(☞306)

Substitution運算符(☞318)

Split運算符(☞321)

●「巧用Perl的專有特性」(☞326)介紹了Perl獨具的正則改良功能,包括在正則表達式的應用過程中執行任意Perl代碼的功能。

●「Perl 的效率問題」(☞347)詳細講解了每個 Perl 程序員關注的問題。Perl 使用傳統型NFA引擎,所以我們可以充分利用第6章介紹的各種技巧。當然,還有一些專屬於Perl的問題會強烈地影響到Perl應用正則表達式的方式和速度。這些都會有所涉及。

前幾章出現的Perl

本書的大部分內容中都出現過Perl:

●第2章 包括Perl的入門知識,給了許多例子。

●第3章 介紹了Perl的歷史(☞88),用Perl語言介紹了許多應用正則表達式的問題,例如字符編碼(包括Unicode☞105)、匹配模式(☞110),以及元字符(☞113)。

●第4章 解密了Perl使用的傳統型NFA引擎。對Perl用戶來說這一章非常重要。

●第5章 承接第4章,包含許多討論過的例子。其中許多是以Perl給出的,即使有些例子不是以Perl給出的,它們的原理也適用於Perl。

●第6章 對效率感興趣的Perl程序員應該仔細閱讀。

為了照顧不熟悉Perl的讀者,前幾章我都簡化了Perl的例子,使用容易看懂的偽碼。本章我會使用Perl風格的代碼來舉例。