正则表达式图书

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链接为:

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


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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring.NET学习笔记12——面向切面编程(基础篇) Level 300

AOP即面向切面编程(Aspect Oriented Programming的缩写),是OOP(面向对象编程)的一种延续形式。是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术,它从一个不同于OOP的角度来看待程序的结构:OOP将…

React开发(158):ant design级联回显 直接传入数组

ReactDOM.render(<CascaderdefaultValue{[zhejiang, hangzhou, xihu]}options{options}onChange{onChange}/>,mountNode, );

vue-cli3使用svg图标的详细步骤

1.安装依赖 npm install svg-sprite-loader -D2.在vue.config.js里添加配置 module.exports{chainWebpack: config > {const svgRule config.module.rule("svg"); svgRule.uses.clear();svgRule.use("svg-sprite-loader").loader("svg-sprite…

网络工程师的忠告

诸位&#xff0c;咱当网络工程师也是几年了&#xff0c;不算有出息&#xff0c;环顾四周&#xff0c;也没有看见几个有出息的&#xff01;回顾工程师生涯&#xff0c;感慨万千&#xff0c;愿意讲几句掏心窝子的话&#xff0c;也算给咱们师弟师妹们提个醒&#xff0c;希望他们比…

python模拟登陆163邮箱并获取通讯录

From: http://hi.baidu.com/fc_lamp/blog/item/2466d1096fcc532de8248839.html python模拟登陆163邮箱并获取通讯录 #-*- coding:UTF-8 -*-import urllib,urllib2,cookielibimport xml.etree.ElementTree as etree #xml解析类class Login163:#伪装browserheader {User-Agent:…

【BZOJ】【3850】ZCC Loves Codefires

贪心 就跟NOIP2012国王游戏差不多&#xff0c;考虑交换相邻两题的位置&#xff0c;对其他题是毫无影响的&#xff0c;然后看两题顺序先后哪个更优。sort即可。 WA了一次的原因&#xff1a;虽然ans开的是long long&#xff0c;但是在这一句:anstime*a[i].k;时&#xff0c;还是需…

Element-UI中关于table表格的那些骚操作

最近的项目中使用到element-ui组件库&#xff0c;由于做的是后台管理系统&#xff0c;所以经常需要操作表格&#xff0c;编辑样式的过程中遇到一些问题&#xff0c;官网针对table给出了很多的api&#xff0c;自己可以自定义&#xff0c;基本能满足产品需求&#xff0c;但是没有…

讯闪菜单密码去除方法

网上有很多关于讯闪菜单密码去除或补丁软件&#xff0c;但都没有把原理说出来&#xff0c;下面介绍方法&#xff1a;打开&#xff1a;讯闪目录\data\ClientCfg.ini查找&#xff1a;分类辅助d41d8cd98f00b204e9800998ecf8427e把分类辅助替换为&#xff1a;d41d8cd98f00b204e9800…

详细介绍 Qt Creator 快捷捷应用

From: http://www.zhujiangroad.com/program/Symbian/25211.html Qt Creator 快捷捷应用是本文要介绍的内容 。以前经常用VSQT的方式来学习QT&#xff0c;VS确实挺强大&#xff0c;不过每次编译Qt&#xff0c;太浪费时间&#xff0c;而且如果重装系统或者VS都必须重新编译&…

asp IIS部署An error occurred on the server when processing the URL错误提示解决

An error occurred on the server when processing the URL. Please contact the system administrator.If you are the system administrator please click here to find out more about this error.其实这是 IIS7 对 ASP 程序发送的一个脚本错误消息&#xff0c;只要是程序中…

修饰符.lazy .number .trim

1、lazy v-model 在每次 input 事件触发后将输入框的值与数据进行同步,也就是在失去焦点或者按下回车键时才更新 <template><div><p>.lazy修饰符</p><input type"text" v-model.lazy"val"><p>{{ val }}</p><…

使用Phar来打包发布PHP程序

简单来说&#xff0c;Phar就是把Java界的jar概念移植到了PHP界。 Phar可以将一组PHP文件进行打包&#xff0c;还可以创建默认执行的stub&#xff08;或者叫做 bootstrap loader&#xff09;&#xff0c;Phar可以选择是否进行压缩&#xff0c;可选gzip和bzip2格式。 下面举例说明…

asp.net动态加载css

谁如果有更直接的方法&#xff0c;请不吝赐教。也不知道.net有什么方法可以直接更换css <% Page Language"C#"AutoEventWireup"true"CodeFile"Default.aspx.cs"Inherits"_Default"%><!DOCTYPE html PUBLIC "-//W3C//DTD…

Qt Creator 使用技巧

From: http://www.developer.nokia.com/Community/Wiki/Qt_Creator_%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7 Qt Creator 使用技巧 简介 Qt Creator 作为Qt 开发的IDE&#xff0c;支持Qt 开发&#xff0c;及QML开发&#xff0c;能很好的发挥Qt 跨平台的特点&#xff0c;这里列举一…

Ubuntu下实现eth0与wlan0完美桥接

操作系统Ubuntu14.04LTS 1.搭载网桥模块 sudo apt-get install bridge-utils安装软件包 modprobe bridge//网上参考步骤&#xff0c;加载网桥模块&#xff0c;实际未用 cho "1">/proc/sys/net/ipv4/ip_forward//网上参考步骤&#xff0c;开启Ip转发功能&#xff0…

前端利用CryptoJS进行AES对称加解密(16进制编码)

加密相关JS https://www.npmjs.com/package/crypto-js 引入JS 使用示例&#xff1a; 附上原文代码方便大家自由使用 //加密 let key CryptoJS.enc.Utf8.parse(123456789qwertyu);//密钥必须是16位&#xff0c;且避免使用保留字符 let encryptedData CryptoJS.AES.encry…

RTMPT

转自http://www.openred5.com/bbs/viewthread.php?tid196 英文原地址&#xff1a;http://www.joachim-bauch.de/tutorials/red5/SPEC-RTMPT.html/view 等一段时间后我也去整理一个出来&#xff0c;因为现在还没有用到rtmpt&#xff0c;只用到rtmp和rtmpe&#xff0c;所以没有时…

前端学习(3339):ant design中加上icon图标

当需要在 Button 内嵌入 Icon 时&#xff0c;可以设置 icon 属性&#xff0c;或者直接在 Button 内使用 Icon 组件。 如果想控制 Icon 具体的位置&#xff0c;只能直接使用 Icon 组件&#xff0c;而非 icon 属性。 ReactDOM.render(<div><Button type"primary&qu…