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

結語

Final Comments

我確信自己已經陶醉於 Perl 的正則表達式中,本章的開頭我曾提到,這是有充分理由的。Perl之父Larry Wall,完全是按照常識和發明的動力(Mother of Invention)來做的。是的,Perl的正則表達式實現也有自己的問題,但是我仍然願意醉心於Perl正則語言豐富的功能,及其與Perl其他部分的融合。

當然,我熱情而不盲目——Perl並沒有提供某些我希望的特性。本書第1版渴望的某些特性現在已經添加了,我會繼續提出要求,希望 Perl 會繼續添加。相對於其他實現,Perl 最急需提供的功能是命名捕獲(☞138)。本章給出了模擬的辦法,但還存在若干限制。提供內建支持是最好的解決辦法。如果能提供字符組集合運算(☞125)也很好,雖然目前可以費點周折用順序環視來模擬(☞126)。

然後是佔有優先量詞(☞142)。Perl的固化分組提供了更多的完整功能,但是在某些情況下佔有優先量詞的解法更清楚更美觀。所以,兩種辦法我都喜歡。事實上,還有兩個我喜歡兩個相關結構,目前還沒有任何流派提供。其中之一是「cut」操作,或者叫「\v」,它會立刻清除當前存在的所有保存狀態(這樣,「x+\v」就等於「x++」或者「(?>x+)」)。另一個結構用來禁止傳動裝置的任何進一步的操作。它的意思是「要麼在當前路徑找到一個匹配,要麼就不容許任何匹配,沒有其他可能。」可能用「\V」來表示比較好。

還有個與「\V」有關的想法,我認為在傳動裝置中添加通用的鉤子功能(general hooks)是有用的,這樣第335頁的程序就可以大大化簡。

最後要說的是,我在第 337 頁曾經提到,在內嵌代碼插值到正則表達式時,提供更多的控制是非常有用的。

Perl當然不是理想的正則表達式語言,但它很接近這個目標,而且一直在進步。