官术网_书友最值得收藏!

返璞歸真——評《正則指引》

第一次接觸正則表達式,是2000年我在西安一家公司使用Perl做網站開發時。之前我在工作中只使用過標準的C語言,Perl這門編程語言的強大表達能力,令我印象極為深刻。Perl的力量,除了語言本身的設計之外,很大程度上來自它對正則表達式的完美支持。當時我們開發了一個網上商城的應用,允許很多商家在這里開店,可以選擇一些不同的樣式模板。我很快發現,使用Perl+正則表達式是開發這類應用的利器。我們只花了大約一個月的時間,就完成了網站核心功能的開發。那時候我意識到,使用正則表達式是聰明人寫程序的方法(沒說我是聰明人,但是我非常希望與那些聰明人為伍),可以極大地提高代碼的重用度和執行效率。如果完全不使用正則表達式,代碼量會增加數倍甚至數十倍。

后來因為一些原因,我告別了Perl。在之后的工作中,我使用過Java、JavaScript、Ruby等編程語言。我發現這些語言對于正則表達式的支持,沒有一個能夠超越Perl。Java這種所謂的“工業主流編程語言”,一直到2002年JDK 1.4推出時,才正式把對正則表達式的支持加入核心類庫。因為長期缺乏對正則表達式的原生支持,以及語言本身表達能力欠缺,使用Java來做大量的文本處理,感覺非常笨拙,完全沒有使用Perl那種指哪打哪的快感。直到2007年我發現了另一個更好的Perl語言—Ruby,才重新找回了2000年Perl帶給我的編程快感。

因為我的工作主要是做Web開發,大量的時間花在與HTML/CSS/JavaScript以及關系數據庫打交道上。在這里并沒有很高深的算法,只有大量繁重的文本處理。難以想象,如果沒有正則表達式,我們的開發將會是何等原始。

除了Web開發領域,需要實現大量自動化功能的一些領域,例如運維領域和自動化測試領域,也是正則表達式大顯身手的地方。無論使用稍顯簡陋的sed/awk還是更高級的Perl/Python/Ruby,實現自動化功能,都必須依賴大量的正則表達式。

自從面向對象的編輯方式時髦起來之后,甚至一度出現了面向對象萬能論,有人試圖用MDA和可執行的UML來解決一切編程問題。但是我一直認為面向對象只解決了軟件開發的一小部分問題,而且是宏觀方面的問題。正則表達式解決的問題,是面向對象無能為力的一些微觀方面的問題。在這里不需要坐而論道的方法論爭論,需要的是刺刀見紅的肉搏戰。這些問題即使使用完全面向對象的方式能夠解決,也會是很笨拙的。如果用物理學來比喻,面向對象是“廣義相對論”,而正則表達式則是“量子力學”。

正則表達式已經成為現代編程語言的基礎模塊,現在很難找到一種不支持正則表達式的編程語言。除了編程語言外,在很多工具軟件,例如文本編輯器(Vi、Emacs、UltraEdit)、Web服務器(Apache、Nginx)中都能找到正則表達式的身影。

余晟老師是我的朋友,我對他印象最為深刻的是他對于技術工作的嚴謹態度。“格物致知”是中國傳統儒家學派所追求的一種道德修養,也是一種境界。余老師是我的朋友中最接近“格物致知”這種境界的一位。我雖然從未精通過任何一門技術,但是很喜歡結交余老師這樣的朋友。

余老師潛心編著的這本《正則指引》深入淺出,將正則表達式的由來和分支娓娓道來。閱讀這本書,我仿佛回到了11年前做Perl程序員時的快樂時光。國內很多程序員的一個通病是好高騖遠,像《正則指引》這樣一本詳細講解基礎知識的書未必會有很好的銷路,但是等你做過很多年開發之后,你會發現,對你最有價值的,正是這些基礎知識和工具。軟件開發的“道”,正是隱藏在這些看起來不起眼的基礎知識和工具之中的。

李錕

2011年11月25日

主站蜘蛛池模板: 叶城县| 高陵县| 阳山县| 郓城县| 米易县| 湾仔区| 安新县| 交口县| 周口市| 华坪县| 天镇县| 富锦市| 蓬安县| 贺兰县| 丰宁| 高阳县| 阳春市| 建昌县| 安西县| 普洱| 新化县| 上饶县| 大方县| 新泰市| 亳州市| 富川| 治县。| 合作市| 温州市| 汤阴县| 隆尧县| 大丰市| 琼海市| 保山市| 普兰县| 禄劝| 巴彦淖尔市| 临汾市| 新蔡县| 进贤县| 宿州市|