讀古今文學網 > 精通正則表達式(第3版) > 第3章 正則表達式的特性和流派概覽 >

第3章 正則表達式的特性和流派概覽

Overview of Regular Expression Features and Flavors

現在我們稍微找到點感覺了,也見識了若干使用正則表達式的工具軟件,你可能覺得,該坐下來潛心研究研究如何使用它們了。不過,比較比較第1章中不同版本的egrep,或是前一章中Perl程序和Java程序的區別就會發現,工具不同,正則表達式的寫法和用法都有很大的不同。

在某種特定的宿主語言或工具軟件中使用正則表達式時,主要有3個問題值得注意:

●支持的元字符,以及這些元字符的意義。這通常稱為正則表達式的「流派(flavor)」。

●正則表達式與語言或工具的「交互」(interface)方式。譬如如何進行正則表達式操作,容許進行哪些操作,以及這些操作的目標文本類型。

●正則表達式引擎如何將表達式應用到文本。語言或工具的設計者實現正則表達式的方法,對正則表達式能夠取得的結果有重要的影響。

正則表達式和汽車

購買汽車時,我們需要考慮的問題和上面 3 點很相似。正則表達式中的元字符是應當首先關注的,它相當於汽車的造型、色彩和內飾,例如CD播放器和真皮座椅。印刷光鮮的宣傳冊上經常可以見到這些信息,在正則表達式的世界中,與之對應的就是第32頁的元字符列表。這些信息很重要,但還不是全部。

正則表達式與宿主語言的交互方式(interface)也很重要。交互方式的一部分內容起到裝飾性作用,描述對應的編程語言中正則表達式的應用規則。另一部分內容定義功能,它們決定了語言所能支持的操作,以及操作的難易程度。對應於汽車的例子,它相當於汽車與我們和我們的生活相「結合」的程度。某些問題可能是裝飾性的,例如加油口在車的哪一側,車窗是否能電動升降。其他問題可能重要些,例如是手動變速還是自動變速。還有些關於功能的問題:你的車怎樣開進車庫?它能裝得下一個大號床墊嗎?如果是滑雪板呢?或者五個大人?(以及這些人如何進出,在這個問題上四門車顯然比兩門車有優勢)。宣傳冊會介紹一些此類信息,不過你可能需要閱讀封底的小字才能瞭解所有細節。

最後需要關注的是引擎,以及引擎驅動車輪的原理。汽車的類比在這裡不適用,因為大家都理解汽車發動機工作的基本知識:如果是汽油發動機,人們就不會往油箱裡加柴油。如果是手動變速,他們不會忘記踩離合器。但是,在正則表達式的世界中,即使是一些最基本的知識:例如正則引擎的匹配原理,以及該原理對表達式的調校和使用的影響,通常都沒有文檔介紹。但是,這些細節對實際使用正則表達式又極其重要,所以我們會在下一章用整章的篇幅來講解。

本章的內容

如標題所示,這一章講解正則表達式的特性和流派。它介紹了經常使用的元字符,以及在具體的工具軟件中使用正則表達式的方式。這些內容涵蓋了上文提到的前面兩點。第三點——正則引擎是如何工作的,這些工作原理有什麼實際意義——會在下面的幾章中涉及。

關於本章,我要說的一點是,它並不能告訴你某種工具軟件中的正則表達式提供了哪些特性,也不會教育你如何使用在提過的各種工具軟件和編程語言中運用正則表達式。相反,它的目的是,提供關於正則表達式本身和使用它的工具軟件的完整圖景。如果我們與世隔絕,只使用一件工具,或許不需要關心其他的工具(或者是該工具的其他版本)有什麼差異。但現實情況並非如此,所以瞭解我們所用工具的技術淵源,或許能夠提供有趣而又有價值的啟示。