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

  • 正則指引
  • 余晟著
  • 1357字
  • 2019-01-09 16:29:08

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

第一次接觸正則表達(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日

主站蜘蛛池模板: 南陵县| 自治县| 临泽县| 大庆市| 资溪县| 大田县| 泰来县| 安远县| 枞阳县| 罗城| 西贡区| 华蓥市| 汉川市| 松江区| 河西区| 宁武县| 岚皋县| 绥阳县| 沈丘县| 砚山县| 同江市| 顺义区| 巴中市| 衡水市| 厦门市| 巩留县| 开封县| 麻栗坡县| 虎林市| 莱西市| 峨眉山市| 嘉义县| 阜阳市| 南召县| 马尔康县| 共和县| 大悟县| 尉氏县| 赣榆县| 建德市| 鞍山市|