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

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

前言

提到正則表達(dá)式,許多人很有點(diǎn)不屑一顧:這東西,不登大雅之堂,再說也不是總要用到,何必專門花時(shí)間學(xué)習(xí)?

沒錯(cuò),正則表達(dá)式并不“總要用到”,但到了需要的場合用不上,往往產(chǎn)生“一分錢難倒英雄漢”的尷尬。經(jīng)常需要處理文本的程序員自然會(huì)知道正則表達(dá)式的價(jià)值,其他的程序員如果不會(huì)正則表達(dá)式,即便開發(fā)的領(lǐng)域與文本處理沒什么關(guān)系,也難免“躺著中槍”的命運(yùn)——前幾天我遇到一個(gè)問題,將一行長長的地址拆分成多行,負(fù)責(zé)這部分的程序員的日常工作只是制作PDF而已,拆分地址是很“邊緣”的功能,但不會(huì)正則表達(dá)式就無法準(zhǔn)確折行(一般需要在標(biāo)點(diǎn)符號出現(xiàn)的地方折行,而不能只在空白字符處折行,但是不同語言中的標(biāo)點(diǎn)符號各有不同),結(jié)果一籌莫展;相反,如果了解正則表達(dá)式,就可以很容易地處理各種語言中的標(biāo)點(diǎn)字符。

以我的開發(fā)經(jīng)驗(yàn)來看,專門花點(diǎn)時(shí)間掌握正則表達(dá)式,確實(shí)是非常有必要的。目前可以見到的關(guān)于正則表達(dá)式的書籍和資料有不少,但又各有不足。

在互聯(lián)網(wǎng)上,流傳著一些編程語言的正則文檔和《30分鐘教會(huì)你正則表達(dá)式》之類的帖子。這類資料的好處是簡單直接,查到了,如果有現(xiàn)成的例子,而且適用于自己的語言,則可以直接拿來用;然而,其壞處也是簡單直接,因?yàn)槿狈Ρ澈笤淼闹v解,如果找不到現(xiàn)成的例子,或者找不到能在自己所使用語言中行得通的例子(需知道,同樣的正則表達(dá)式并不能直接套用到不同的語言中),則束手無策。

在正式的出版領(lǐng)域,已經(jīng)有《精通正則表達(dá)式》、《正則表達(dá)式必知必會(huì)》之類的書籍出版,尤其是前者,堪稱關(guān)于正則表達(dá)式的經(jīng)典著作,如果想認(rèn)真學(xué)習(xí)正則表達(dá)式,這類書籍是必須閱讀的。但這類書籍也有一個(gè)弱點(diǎn),即都是由英文版本翻譯而來的,更多地側(cè)重英文文本的處理,身為中文世界的開發(fā)人員,我們經(jīng)常需要處理中文文本——對于處理英文之外的字符,正則表達(dá)式已經(jīng)提供了足夠豐富的功能,但如何用對、用好這些功能,資料卻很匱乏。

我經(jīng)常需要給人講解正則表達(dá)式的相關(guān)知識,時(shí)常惋惜的是,開發(fā)人員為這些問題所困擾;正因?yàn)槿绱耍緯膶懽鲃?dòng)機(jī)便是著力彌補(bǔ)現(xiàn)有資料的缺陷。

相對于正則文檔和速成教學(xué)帖子,本書深入講解了匹配背后的原理,往往會(huì)舉一反三,告訴讀者,這里為何這樣寫,如果改成其他形式,會(huì)造成什么結(jié)構(gòu);并且,集中講解和比較了多種語言中正則表達(dá)式用法的異同,方便讀者把現(xiàn)成的正則表達(dá)式“移植”到自己的工作環(huán)境中。

相對于《精通正則表達(dá)式》等正式的書籍,本書辟出專門的內(nèi)容講解語言和編碼,告訴讀者如何設(shè)定編碼,如何正確處理中文等字符。另外,本書還涵蓋了.NET、Java、JavaScript、PHP、Python、Ruby六種常用語言,對每種語言給出專門章節(jié),不但詳細(xì)介紹了語言中正則表達(dá)式的用法,更點(diǎn)明了版本之間的細(xì)微差異,不但可以作為專門學(xué)習(xí)的教材,還可以成為有用的參考手冊。

本書結(jié)構(gòu)

本書可以分為三大部分。

第一部分主要講解正則表達(dá)式的基礎(chǔ)知識,覆蓋常見正則表達(dá)式中的各種功能和結(jié)構(gòu)。看完前面3章,就可以基本弄明白現(xiàn)在流行的各種正則表達(dá)式;尤其是如果你之前有一些經(jīng)驗(yàn),會(huì)覺得閱讀起來并不困難。但是我也希望讀者不要忽略其他的內(nèi)容,斷言和匹配模式現(xiàn)在已經(jīng)是正則表達(dá)式的“標(biāo)準(zhǔn)配備”了,而且確實(shí)可以派上大用場,所以第4章和第5章的內(nèi)容,即便不是很熟悉,閱讀起來可能有一些麻煩,也不應(yīng)該忽略。最后的第6章,則厘清了正則表達(dá)式在使用中的若干疑惑,了解它們,你就可以相對自由地在正則表達(dá)式的世界里行走了。

第二部分主要講解關(guān)于正則表達(dá)式的更深入的知識,這一部分用3章的內(nèi)容,詳細(xì)探討了編碼問題、匹配原理、解題思路。這部分內(nèi)容更抽象,需要多花一點(diǎn)時(shí)間來閱讀和理解,但是它們確實(shí)可以幫你在正則表達(dá)式的世界里登堂入室,脫離“術(shù)”的層面,掌握萬變不離其宗的“道”。

第三部分的作用是接地氣,將之前介紹的各種知識落實(shí)到六種常用語言.NET、Java、JavaScript、PHP、Python、Ruby中來。每一章的開頭有正則功能列表,其中的功能都對應(yīng)著前面部分的講解,這些功能的具體應(yīng)用實(shí)例,以及不同版本之間的差異,則在章節(jié)中詳細(xì)講解,每一章的最后還給出了常見任務(wù)的示例代碼,方便日后查詢。在最后,第16 章簡要介紹了正則表達(dá)式在Linux下常用工具vi、grep、awk、sed中的使用,并通過一個(gè)實(shí)際的例子將這幾種工具串起來,對比說明了它們適合解決的問題。

在本書的最后提供了用作參考的3個(gè)附錄。

附錄A是正則表達(dá)式的常用功能在不同語言中的比對,希望能給需要在多種語言中使用正則表達(dá)式或者移植正則表達(dá)式的讀者提供一份有用的參考;附錄B給出了若干常見的正則表達(dá)式,比如匹配郵政編碼、身份證號、手機(jī)號、QQ號、電子郵件地址等,希望能成為常見問題的“速查手冊”;附錄C列出了常用正則表達(dá)式的工具和資源,方便大家調(diào)試自己的正則表達(dá)式,以及繼續(xù)深入學(xué)習(xí)。

本書讀者

本書適合以下幾類讀者。

經(jīng)常需要進(jìn)行文本處理(比如日志分析或網(wǎng)絡(luò)運(yùn)維)的技術(shù)人員。這些讀者或許已經(jīng)熟悉了正則表達(dá)式的基本用法,但面對日益復(fù)雜化和海量化的數(shù)據(jù),閱讀本書可以幫助你更準(zhǔn)確、更高效地處理文本,提升自己工作的價(jià)值。

熟悉常用開發(fā)語言的程序員。雖然這些讀者不需要專職進(jìn)行文本處理,但源代碼和許多數(shù)據(jù)其實(shí)也是文本,如果不會(huì)正則表達(dá)式,在偶然遇到處理源代碼或文本數(shù)據(jù)的任務(wù)時(shí),往往會(huì)產(chǎn)生躺著中槍的無力感。本書第三部分可以幫你迅速找到有關(guān)的例子,并落實(shí)在自己的編程語言中。當(dāng)然前兩部分也非常有必要,因?yàn)樗鼈兛梢詭湍愫粚?shí)基礎(chǔ)。

對正則表達(dá)式已經(jīng)有一定了解的讀者。這些讀者雖然能用正則表達(dá)式解決常見的任務(wù),但未必了解正則表達(dá)式的編碼問題、匹配原理、解題思路,仔細(xì)閱讀本書的第二部分,可以深化完善對正則表達(dá)式的理解;而第三部分詳細(xì)比較了使用正則表達(dá)式時(shí)各種語言,以及同一種語言中各種版本的差異。所有這一切,應(yīng)該可以讓你對正則表達(dá)式的掌握更上一層樓。

致謝

一本書的完成,必然離不開眾多人的幫忙。

首先需要感謝的是周筠老師和徐定翔、盧鶇翔兩位編輯,他們在我寫作的最初階段做了大量細(xì)心、耐心的工作,完全可以說,沒有他們的這些工作,我就不會(huì)有寫作這本書的念頭,或者堅(jiān)持寫完的動(dòng)力。

然后要感謝的是電子工業(yè)出版社的楊福平副總編和張?jiān)缕季庉嫞瑳]有他們的關(guān)照和辛勞工作,這本書的出版定然會(huì)遇到更多的困難。

感謝我的朋友霍炬和韓磊,雖然我之前閱讀過《精通正則表達(dá)式》,但與翻譯和寫作結(jié)緣,他們給了我莫大的幫助,有了這個(gè)契機(jī),才有了現(xiàn)在的《正則指引》。尤其值得一提的是霍炬的夫人西喬,精心手繪了這本書的封面,在這里表示誠摯的謝意。

感謝我曾工作過的盛大創(chuàng)新院以及創(chuàng)新院的各位同事(李駿、郝培強(qiáng)、莊表偉、丁宇、許式偉、莫華楓、李道兵、趙劼、樊一鵬、張一寧等),創(chuàng)新院給了大家寬松自由的工作環(huán)境,與各位同事的討論加深了我對正則表達(dá)式的理解,也為我提供了許多例子。

感謝張東亮、陸亦斌、孫勇、葉勁峰等各位朋友,愿意撥冗閱讀本書的草稿,并提出了大量專業(yè)的意見。

感謝何源、陳鋼、賀鈞、陳馳等讀者,試讀本書之后提出了大量的寶貴意見,在最后關(guān)頭打消了我心中的許多忐忑。

在更早之前,我的父母從小就鼓勵(lì)我研究和了解各種科學(xué)原理(“玩也要?jiǎng)幽X筋”),我之所以有興趣探究正則表達(dá)式背后的世界,而不滿足于“夠用/湊合”,歸源都是受益于這種思維行為習(xí)慣。此外,在中小學(xué)階段,我的語文老師羅碧玉、郭志鴻、易璽銘培養(yǎng)了我對于文字的興趣,在大學(xué)階段,東北師范大學(xué)文學(xué)院的王確老師給了我這個(gè)理科生非常多的幫助和指引。對各位師長,在此一并表示感謝,能遇到你們是我的幸運(yùn)。

最后還需要感謝許多為這本書做出過貢獻(xiàn)的人,你們的名字我可能暫時(shí)無法記起,或者無法一一羅列,但我會(huì)在心中存留對你們的謝意。

主站蜘蛛池模板: 宣恩县| 镇雄县| 贵南县| 普安县| 石林| 抚远县| 灵武市| 厦门市| 南乐县| 顺昌县| 扎赉特旗| 南京市| 霍邱县| 安远县| 丰台区| 秦安县| 马龙县| 德江县| 沾化县| 涡阳县| 阿勒泰市| 浙江省| 南岸区| 饶河县| 日照市| 永清县| 韶山市| 页游| 韶关市| 尚义县| 开平市| 礼泉县| 福建省| 民乐县| 黑龙江省| 静海县| 仪陇县| 额济纳旗| 青州市| 渑池县| 沅江市|