返璞歸真——評《正則指引》
第一次接觸正則表達(dá)式,是2000年我在西安一家公司使用Perl做網(wǎng)站開發(fā)時。之前我在工作中只使用過標(biāo)準(zhǔn)的C語言,Perl這門編程語言的強(qiáng)大表達(dá)能力,令我印象極為深刻。Perl的力量,除了語言本身的設(shè)計之外,很大程度上來自于它對正則表達(dá)式的完美支持。當(dāng)時我們開發(fā)了一個網(wǎng)上商城的應(yīng)用,允許很多商家在這里開店,可以選擇一些不同的樣式模板。我很快發(fā)現(xiàn),使用Perl+正則表達(dá)式是開發(fā)這類應(yīng)用的利器。我們只花了大約一個月的時間,就完成了網(wǎng)站核心功能的開發(fā)。那時候我意識到,使用正則表達(dá)式是聰明人寫程序的方法(沒說我是聰明人,但是我非常希望與那些聰明人為伍),可以極大地提高代碼的重用度和執(zhí)行效率。如果完全不使用正則表達(dá)式,代碼量會增加數(shù)倍甚至十倍。
后來因為一些原因,我告別了Perl。在之后的工作中,我使用過Java、JavaScript、Ruby等編程語言。我發(fā)現(xiàn)這些語言對于正則表達(dá)式的支持,沒有一個能夠超越Perl。Java這種所謂的“工業(yè)主流編程語言”,一直到2002年JDK 1.4推出時,才正式把對正則表達(dá)式的支持加入到核心類庫。因為長期缺乏對正則表達(dá)式的原生支持,以及語言本身表達(dá)能力欠缺,使用Java來做大量的文本處理,感覺非常笨拙,完全沒有使用Perl那種指哪打哪的快感。直到2007年我發(fā)現(xiàn)了另一個更好的Perl語言——Ruby,才重新找回了2000年P(guān)erl帶給我的編程快感。
因為我的工作主要是做Web開發(fā),大量的時間花在與HTML/CSS/JavaScript以及關(guān)系數(shù)據(jù)庫打交道上。在這里并沒有很高深的算法,只有大量繁重的文本處理。難以想象,如果沒有正則表達(dá)式,我們的開發(fā)將會是何等原始。
除了Web開發(fā)領(lǐng)域,需要實現(xiàn)大量自動化功能的一些領(lǐng)域,例如運維領(lǐng)域和自動化測試領(lǐng)域,也是正則表達(dá)式大顯身手的地方。無論使用稍顯簡陋的sed/awk還是更高級的Perl/Python/Ruby,實現(xiàn)自動化功能,都必須依賴大量的正則表達(dá)式。
自從面向?qū)ο髸r髦起來之后,甚至一度出現(xiàn)了面向?qū)ο笕f能論,有人試圖用MDA和可執(zhí)行的UML來解決一切編程問題。但是我一直認(rèn)為面向?qū)ο笾唤鉀Q了軟件開發(fā)的一小部分問題,而且是宏觀方面的問題。正則表達(dá)式解決的問題,是面向?qū)ο鬅o能為力的一些微觀方面的問題。在這里不需要坐而論道的方法論爭論,需要的是刺刀見紅的肉搏戰(zhàn)。這些問題即使使用完全面向?qū)ο蟮姆绞侥軌蚪鉀Q,也會是很笨拙的。如果用物理學(xué)來比喻,面向?qū)ο笫恰皬V義相對論”,而正則表達(dá)式則是“量子力學(xué)”。
正則表達(dá)式已經(jīng)成為了現(xiàn)代編程語言的基礎(chǔ)模塊,現(xiàn)在很難找到一種不支持正則表達(dá)式的編程語言。除了編程語言外,在很多工具軟件,例如文本編輯器(Vi、Emacs、UltraEdit)、Web服務(wù)器(Apache、Nginx)之中都能找到正則表達(dá)式的身影。
余晟老師是我的朋友,我對他印象最為深刻的是他對于技術(shù)工作的嚴(yán)謹(jǐn)態(tài)度。“格物致知”是中國傳統(tǒng)儒家學(xué)派所追求的一種道德修養(yǎng),也是一種境界。余老師是我的朋友中最接近“格物致知”這種境界的一位。我雖然從未精通過任何一門技術(shù),但是很喜歡結(jié)交余老師這樣的朋友。
余老師潛心編著的這本《正則指引》深入淺出,將正則表達(dá)式的由來和分支娓娓道來。閱讀這本書,我仿佛回到了11年前做Perl程序員時的快樂時光。國內(nèi)很多程序員的一個通病是好高騖遠(yuǎn),像《正則指引》這樣一本詳細(xì)講解基礎(chǔ)知識的書未必會有很好的銷路。但是等你做過很多年開發(fā)之后,你會發(fā)現(xiàn),對你最有價值的,正是這些基礎(chǔ)知識和工具。軟件開發(fā)的“道”,正是隱藏在這些看起來不起眼的基礎(chǔ)知識和工具之中的。
李錕
2011年11月25日
- 電氣自動化專業(yè)英語(第3版)
- 3D Printing with RepRap Cookbook
- Hands-On Machine Learning with TensorFlow.js
- VB語言程序設(shè)計
- Photoshop CS3圖像處理融會貫通
- 機(jī)器人編程實戰(zhàn)
- 21天學(xué)通Visual C++
- 完全掌握AutoCAD 2008中文版:機(jī)械篇
- 大學(xué)C/C++語言程序設(shè)計基礎(chǔ)
- 愛犯錯的智能體
- 網(wǎng)絡(luò)布線與小型局域網(wǎng)搭建
- Python:Data Analytics and Visualization
- Statistics for Data Science
- Extending Ansible
- 基于企業(yè)網(wǎng)站的顧客感知服務(wù)質(zhì)量評價理論模型與實證研究