讀古今文學網 > 精通正則表達式(第3版) > 總結 >

總結

Summary

如果你希望一遍就能讀懂本章的所有內容,大概得做點準備。至少,這些東西不那麼容易理解。我花了些時間才理解它,花了更長的時間才真正弄懂。我希望這章簡要的講解能夠降低讀者理解的難度。我嘗試過簡單地解釋,同時不要調入太簡單的陷阱(不幸的是,太過直白的解釋總是妨礙了真正的理解)。本章有許多這樣的陷阱,所以我在其中安排了許多對其他頁的引用,在下面的摘要中,讀者可以很快地找到其他的內容。

實現正則表達式匹配引擎有兩種常見的技術,一種是「表達式主導的NFA」(☞153),另一種是「文本主導的DFA」(☞155)。它們的全稱見第156頁。

這兩種技術,結合POSIX標準,可以按照實用標準劃分3種正則引擎:

●傳統型NFA(汽油驅動,功能強大)。

●POSIX NFA(汽油驅動,符合標準)。

●DFA(不一定符合POSIX)(電力驅動,運轉穩定)。

為了對手頭的工具有個大致的瞭解,你需要知道它採用的是什麼引擎,以對正則表達式做相應的調校。最常見的引擎就是傳統型NFA,其次是DFA。表4-1(☞145)列出了若干常用工具及它們使用的引擎類型,「測試引擎的類型」(☞146)給出了測試引擎類型的方法。

對於任何引擎來說,都有一條通用的規則:開始位置靠先的匹配文本優先於開始位置靠後的匹配文本。因為「傳動機構」會從前往後在文本的各個位置展開嘗試(☞148)。

對於從某個位置開始的匹配:

文本主導的DFA引擎:

尋找可能的最長的匹配文本。不再介紹(☞177)。穩定、速度快(☞179),講解起來很麻煩。

表達式主導的NFA引擎:

匹配過程中可能需要「反覆嘗試(work through)」。NFA匹配的靈魂是回溯(☞157,162)。控制匹配過程的元字符:標準量詞(星號等等)是匹配優先的(☞151),其他量詞是忽略優先或者佔有優先的(☞169)。在傳統型NFA中,多選結構是有序排列的(☞174),在POSIX NFA中是匹配優先的。

POSIX NFA 必須找到最長的匹配文本。但是,匹配並不難理解,只須考慮效率(第6章的問題)。

傳統型NFA 控制能力最強的正則引擎,因此使用者可以使用該引擎的表達式主導性質來精確控制匹配過程。

理解本章的概念和練習是書寫正確而高效的正則表達式的基礎,這也是接下來兩章的主題。