正则表达式图书

From: http://www.usidcbbs.com/read-htm-tid-1457-page-2.html

网文 vs 书藉

只要是知道“正则”这个词的,上网搜集个把资料,应该就不是问题吧。我获得正则消息的网絡渠道有这样几个,以质量从高到低排序:dilicious标签(颇有些不错的文章) > 一些与正则相关的博客(可以参考我整理的这个页面正则链接 ,不定期更新中) > google alerts (关键词[regex, regular expressions, 正则,正则表达式]都建议添加,有时也能发现好文章)。

网文资料有几大特点是实体书(简称书)无法比拟的。快速(最鲜活的一手资料),便捷(即时迅速的发布),成本低(只需花费时间成本来搜索、收集这些内容即可,总体上无需支付其它费用),零星信息多,发布网文门槛低,与作者互动容易,作者活生生的感受,网絡语言的应用,等等等等,都是实体书难以望其项背的。然而书仍未迅速消亡,原因有:符合绝大多数人的阅读习惯,是获取知识的最传统的渠道。最重要的是,作为一本书书,其系统性、严谨性,是远非一篇篇零散的博客文章所能比拟的。谁都能写博客,但是未必能写书。写书的门槛其实也自动过滤了一些芸花一现、不成体系的内容。当然,两者的目的都是为了记录知识,传播知识,殊途同归而已,在现阶段可以不必考虑谁灭谁,而应该结合起来,相互补充,为读者所用。

下面浅谈一下关于正则表达式的书藉。以我读的先后顺序排列。

Perl 语言编程

《Perl 语言编程》我首先接触的与正则式相关的书,是何伟平老师翻译的大骆驼书。书中关于 Perl 正则的篇幅不少,第五章,近百页内容全是讲正则,系统全面(包括搜索,替换,分隔,各种操作;各种元字符;各种 flag,各种零宽断言,Unicode,……),深入(匹配、回溯原理,以及最左最长原则等即6条规则——“六脉神剑”)。如果想学习 以Perl 为主的语言的正则的话,这本书中这一部分不可不读。当然,很少有 Perl 程序员没听过正则、没听过大骆驼书的。因此我这里的推荐或许是多余的。既然是 Perl only 的书,如果您对 Perl 的语法不感兴趣的话,这本书很可能不适合您。补充一下,这本书网上有个800k左右的chm电子版,但是从篇幅上看,貌似被广电总局处理过。

一句话书评:不适合当作新手入门材料,适合给 Perl 程序员作系统阅读和参考。

适合读者:中、高。

精通正则表达式

《精通正则表达式》。简称MRE。这本书堪称正则界的bible。其它任何一本严肃一点的涉及正则表达的书,都会这样说一句:“本书无意剖析正则表达式的原理。如果想深刻理解正则表达式,请阅读MRE.” 这样一写,暗示了关于正则表达式的书可以分为两类,一类是 像 thinking in C++ 这样的阐述内功心法的理论性著作,另一类像是 java script Cookbook 这样可以照着做、拿来就用的活生生的剑招指南。后者是便于初学者照猫画虎,立见成效;前者适合面壁参悟,结合以往的实战经验,反复阅读才能达到“十年苦修,一朝顿悟”的境界。

这本书不是很适合入门,虽然从开场白到前三章,都归纳了一些正则表达式的概念,但是该书的重心是四章讲述匹配引擎的工作原理,以及第五、六章的优化建议。这些理论知识与具体语言无关,内容从深度到广度,是其它正则书无法替代和超越的核心内容,是全书精华所在。其后的七至十章,介绍了一些与具体语言相关的技术和技巧,(perl/php/.net/java),也非常不错,而且也都是常用的语言的内容。相比之下,前一二三章的紧凑的开场白和暖场,就更像是从内容的完整性上考虑而添加的,作为新手来说,不能期望读完了第三章就能平滑地升级到第四章。在有了一些实际使用经验,尤其是对正则引擎的工作原理有了初步了解之后,再来读第四章,可能收获会更大。

书中有两句话,记忆犹新。一是读者评价:“读这本书之前,我以为自己了解正则表达式,但是现在我才真正弄明白。”就我自己而言,第四章匹配原理,我即使读了MRE也没一下子明白过来,而是中途补了编译原理的课,再回过头来攻读NFA/DFA,才豁然开朗的。

另一句,是关于正则表达式的作用评价的:“一旦掌握了正则表达式,你就会知道它简直是工具中的无价之宝,你也难以想象,之前那些没有正则表达式的日子是怎么度过的。” 就我自己而言,正则式的确是极其有用的工具,但是我也开始有意识地思考没有正则表达式的日子该怎么度过了。好吧,我指的是,从效率考虑,什么时候该使用正则表达式,什么时候不应该;从学习的角度出发,如何自己也写一款正则引擎,哪怕是最简单的也好。

一句话书评:不太适合入门,但是绝对是中手及高手的案头必备。没读过这本书的,你都不好意思跟别人说理解正则表达式。

适合读者:中、高。

《正则表达式必知必会》

最早在推特上听图灵刘江老师提到过这本书(这本书是人民邮电出的)。这是一本薄薄的小书,号称是10分钟教会你使用正则表达式,篇幅也不过150页。这样的篇幅,你不能期望它给你从头到尾讲一下匹配六原则,事实上阐述原理是其它书的职责所在。它所做的,是告诉你什么是正则表达式,应该如何使用;简明扼要的定义,加上较多的实例,的确10分钟你就学会如何匹配美国、加拿大的邮政编码了。

不过,不久前不是有篇极其火的《如何10年学编程》吗,总结为一句话就是要练够1万个小时才能精通;还有一篇漫画,如何21天精通C++,窍门是先花费几万天精通完所有的相关知识之后再时光旅行,杀死学c++第21天时的自己。以此来看,10分钟的教程不会让你精通正则表达式,这简直是一定的。但是,正则表达式极其有用,花个十分钟学一下,看看它大致是怎么回事,可以用来做什么,以及如何来做。之后用到正则式了,可以在原有基础之上修改,比如将上述美国、加拿大的邮政编码,替换为贵国的编码,等等。

我通读了一遍该书,内容还是比较丰富的。它在讲述如何使用正则表达式上,花费的力气相当大;将正则表达式按照语法特征,分为10章,逐条解释;最后用一两章的篇幅,总结如何在编程语言中使用正则,以及常见问题的固定思路。可谓麻雀虽小,五脏俱全。

一句话书评:适合绝对的新手入门,以及语法不太熟的中手作案头参考。

适合读者:初、中。

吹毛求疵:如果说它作为入门书还有什么缺点的话,应该是书中的不少例子都有些偏欧美风格。例如电话号码,区号什么的。虽然掌握语法之后,这些东西都是浮云。毕竟是翻译过来的书。

《正则表达式入门经典》

再介绍一本入门书:《正则式入门经典》,英文是《Beginning Regular Expressions》从内容上看,觉得这个中文书名比英文书名要更贴切一些。它的确是一本入门的经典著作。因为篇幅比较宽裕,它的写作方式就不像《正则表达式必知必会》那要干瘪枯燥,而是从通配字符和MS Word谈起,详细地起承转合,尽职地表现出带新人入门的耐心。从内容覆盖上来讲,它是《正则表达式必知必会》的增强版+Office正则(MS,Excel, VBA,OOo,等等)+Windows findstr+ PowerGREP+SQL Server+ MySQL+java script+ Perl+更多。不但是入门,还是经典的入门。

一句话书评:如果您只想买靠谱的“一册在手、全程无忧”的正则表达式教材的话,就是它了。

适合读者:初、中、高。

吹毛求疵:太厚,太全。尤其是最后面的语法参考部分,每门语言都拿出一章来介绍用法,但是你阅读之后就会发现,通用的东西多,specific的东西少;对于程序员来说,理解了原理之后,编程语言只需要看文档和API就能搞定;对于普通用户来说,他用既然要用Office系列,就不太可能同时也用 SQL,Perl,Java。这本书太想求全了,因此可能都不讨好。当然了,我是吹毛求疵而已。

《正则表达式经典实例》

最后一本,参考书:《正则表达式经典实例》。这本书在简单介绍正则表达式之后,紧扣“实例”二字,对于每个问题都试图给出多语言的正则解法。如何体现经典呢?一是选例经典,二是解法经典。包括的语言有 Perl/PCRE/.NET/Java/java script/Python/Ruby。这么多的语言,必有一款适合您。也就是说,也有可能多款不适合您  不过,正则表达式是用来解决问题的,只要你能在条目繁多的目录中找到您的问题并找到解法,又何必在乎它还为别人提供了其它语言的解法呢?它就是一本参考书而已,没有必要按照A-Z的顺序精读并背诵,能查到自己需要的东西就是王道。

如果您有做题习惯的话,这本书也适合您。试想,各种各样分门别类的问题,以及相应的解法参考……

最后不能不提的是,该书作者Jan Goyvaerts之一是也RegexBuddy/PowerGREP的开发者。RegexBuddy用起来怎一个爽字了得。

一句话书评:定位明确的较好的正则实例参考书。

适合读者:中。(不太适合新手入门,高手也不必参考书中的和解法。这样说,是不是太低估新手,同时高估高手呢?)

吹毛求疵:书中频频亮相的工具软件当然Jan自己的软件,英文界面,绝对好用但是价格也不菲。不熟悉这些软件的读者可能觉得有些别扭。

最好的正则表达式入门书

最全的书不一定是最好的书。

大家都说好的书不一定是最好的书。

克服了上述书的缺点的书不一定是最好的书。

适合自己的书,才是最好的书。

余老师写的《正则表达式傻瓜书》

余老师的《正则表达式傻瓜书》,虽然尚未面世,仍然非常值得期待,理由如下:

  • 如前所言,余老师是《精通正则表达式》的翻译者,对正则表达式有深刻的理解,而且有丰富的使用经验,这是写这本书的先决条件;
  •  余老师的分析问题、描述问题、讲解知识点的功力非常强。我有幸先睹为快了前几章的样稿,十分佩服。要知道,理解正则表达式,应用正则表达式,和向别人解释正则表达式,其实是截然不同的三件事。
  • 前期就有缜密的计划,中期广泛征求意见,不断接受意见并相应完善。

结尾

上面提到的书的Douban链接为:

  • 大骆驼
  • 精通正则表达式
  • 正则表达式必知必会
  • 正则表达式入门经典
  • 正则表达式经典实例
  • 余老师的博客:乱象,印记


任何一门编程语言,坊间都已经充塞着各种各样的书可供参考。而正则表达式的书,放眼望去,寥若晨星。渴望有更多的正则好书涌现出来。或者,我也硬着头皮,写一本试试看?


你可能感兴趣的:(RegularExp)