IT产业新技术日新月异,令人目不暇给,然而在这其中,真正称得上伟大东西的却寥寥无几。1998年,被誉为“软件世界的爱迪生”,发明了BSD、 TCP/IP、csh、vi和NFS的SUN首席科学家Bill Joy曾经不无调侃地说,在计算机体系结构领域里,缓存是唯一称得上伟大的思想,其他的一切发明和技术不过是在不同场景下应用这一思想而已。在计算机软件 领域里,情形也大体相似。如果罗列这个领域中的伟大发明,我相信绝不会超过二十项。在这个名单当中,当然应该包括分组交换网络、Web、Lisp、哈希算 法、UNIX、编译技术、关系模型、面向对象、XML这些大名鼎鼎的家伙,而正则表达式也绝对不应该被漏掉。正则表达式具有伟大技术发明的一切特点,它简 单,优美,功能强大,妙用无穷。对于很多实际工作来讲,正则表达式简直是灵丹妙药,能够成百倍地提高开发效率和程序质量。CSDN的创始人蒋涛先生在早年 开发专业软件产品时,就曾经体验过这一工具的巨大威力,并且一直印象深刻。而我的一位从事网络编辑工作的朋友,最近也领略了正则表达式的威力——他用 Perl开发了一个不足20行的小程序,使用正则表达式将一项原本每天耗用10个人时的工作在一分钟之内自动完成。而正则表达式在生物信息学和人类基因图 谱的研究中所发挥的关键作用,更是被传为佳话。无论对于软件开发者,还是从事其他知识工作的专业人士,正则表达式都是最有利的工具之一。

所谓正则表达式,就是一种描述字符串结构模式的形式化表达方法。在发展的初期,这套方法仅限于描述正则文本,故此得名“正则表达式(regular
expression)”。随着正则表达式研究的深入和发展,特别是Perl语言的实践和探索,正则表达式的能力已经大大突破了传统的、数学上的限制,成
为威力巨大的实用工具,在几乎所有主流语言中获得支持。为什么正则表达式具有如此巨大的魅力?一方面,因为正则表达式处理的对象是字符串,或者抽象的说,
是一个对象序列,而这恰恰是当今计算机体系的本质数据结构,我们围绕计算机所做的大多数工作,都归结为在这个序列上的操作,因此,正则表达式用途广阔。另
一方面,与大多数其他技术不同,正则表达式具有超强的结构描述能力,而在计算机中,正是不同的结构把无差别的字节组织成千差万别的软件对象,再组合成为无
所不能的软件系统,因此,描述了结构,就等于描述了系统。在这方面,正则表达式的地位是独特的。正因为着两点,在现在的软件开发和日常数据处理工作中,正
则表达式已经是必不可少的工具。如果一个开发工具不支持正则表达式,那它就会被视为玩具语言,如果一个编辑器不支持正则表达式,那它就会被成为阳春应用。
连人们原本并不指望应用正则表达式的商用数据库,各家厂商也竞相以支持正则表达式为卖点。正则表达式的声势之隆,是毋庸置疑的。

非常奇怪的是,这样一个了不起的技术,在我国却并没有得到充分推广。以其价值而言,正则表达式不但值得每一个专业程序员掌握,而且值得所有知识工作者去了
解。然而现实情况是,不但一般知识工作者大多闻所未闻,很多专业程序员也视之为畏途。为什么会出现这种情况呢?原因有二。其一,正则表达式产生和发展在
UNIX文化体系之中,而我国软件开发社群的知识结构长期受到微软的决定,UNIX文化影响甚微。在2002年推出.NET平台之前,微软在其各项主流平
台、产品与开发工具当中,均未对正则表达式给予足够重视,相应地,我们的开发者们对正则表达式也就知之不多。第二,也是更重要的原因,就是正则表达式并不
是那么好掌握的,在通向驾驭正则表达式强大力量的道路上,还是有那么几只拦路虎的,而要打虎过岗,不但要花点功夫,还要有正确的方法。

学习正则表达式,入门不难,看一些例子,试着模仿模仿,就可以粗通,并且在工作中解决不少问题。然而大部分学习者也就就此止步,他们对自己说:“正则表达
式不过如此,我就学到这里了,以后现用现学就行了。”他们以为自己可以像学习其他技术一样,在实践中逐渐提高正则表达式的应用水平。然而事实上,正则表达
式并不是每天都会用到,而其密码般的形象,随着时间的推移很容易被忘记,所以经常发生的情况是,开发者对于正则表达式的记忆迅速消退,每次遇到新的问题,
都要查资料,重新唤回记忆,对于稍微复杂一点的问题,只好求助于现成的解决方案。反反复复,长期如此,不但应用水平难以明显提升,而且逐渐对这项技术产生
一定的恐惧感和厌烦情绪。这还只是应用阶段,正则表达式应用的高级阶段,要求开发者此外还必须充分理解正则表达式的能力范围,能够将一些正则表达式技术组合应用,达成超乎一般想像的效果。为了高效、正确地解决实际问题,有的时候甚至要求深入理解正则表达式的原理,甚至对于如何实现正则表达式引擎都有所了解,在此基础上,规避陷阱,优化设计,提高程序执行效率。要达到这样的程度,不经过系统的学习是不可能的。

系统学习正则表达式并不是一件容易的事情,仅仅通过阅读一些“HOW
TO”的快餐式的文章是不行的,必须有更完整、更系统的资料指导学习。如果你在国外技术社区里询问如何才能系统学习正则表达式,几乎所有的领域专家都会向
你推荐一本书——Jeffrey Friedl的《精通正则表达式》,也就是本书。

这本《精通正则表达式》是系统学习正则表达式的唯一最权威著作。可以说,在今天,如果想理解和掌握正则表达式,想要建立关于这一技术的完整概念体系,想充
分发挥其巨大能量,这本书几乎无法绕开的必经之路。甚至可以说,如果你没有读过这本书,那么你对于正则表达式的理解和应用能力一定达不到升堂入室的程度。
本书第一版出于十年之前,自那时起就成为正则表达式领域最全面、最受欢迎的代表著作,数以万计的读者通过这本书掌握了正则表达式,成为行家里手。在任何时
候,任何地方,只要提到正则表达式著作,人们都会提到这本书。这本书的质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域形
成独特的“一夫当关”的局面,称其为正则表达式圣经,绝对当之无愧。

为什么这本书能够表现得如此出色?我认为这其中有三个原因。其一,作者本人具有多年程序开发经验,理论基础深厚,实战经验丰富,对正则表达式这个主题透彻
理解,因此在技术上得心应手,底气十足,对于技术上的难点不回避、不含糊。作者高超的技术水平是本书质量的强大保证。其二,作者思路对头,素材组织得当,
用例丰富。正则表达式根植于数学理论,却又能在日常俗事上发挥巨大的效用。写这种类型的技术,思路稍微一偏差,就可能走歪路,不是太理论,就是太琐碎,不
是太枯燥,就是太浅薄,实在很难把握。作者清楚地认识到,这本书的读者不是计算机科学家,但也不是满足于“知其然而不知其所以然”的快餐式代码小子,而是
具有一定理论素养,却又始终以实践为本的专业开发者。他们需要的是面向实践的理论和思想,是实实在在的实战能力,只有满足这种需要,才能够真正打动读者。
通读此书,可以说作者对这一路线的把握十分成功,保证了内容大方向的正确。其三,这本书的写法独具匠心,堪称典范。技术图书的主要使命是传播专业知识。而
专业知识分为框架性知识和具体知识。框架性知识需要通过系统的阅读和学习掌握,而大量的具体知识,则主要通过日常工作的积累以及随用随查的的学习来逐渐填
充起来。本书前六章,以顺序式记述的方式,将正则表达式的系统知识娓娓道来,读者像看故事书似的就建立起整个正则表达式的基本知识体系。而后面的内容,则
是方便实际开发中频发查阅之用,包括各大主流语言对正则表达式的支持细节,包含有大量案例。这样的写法,完全符合一般人学习的特点,因此书读起来非常惬
意,非常有趣,而用的时候查起来又非常方便。这样的著述风格,实在值得学习。

读者可以在没有任何正则表达式的基础上开始阅读此书,只要勤动脑,加强理解,适当动手练习,将能够在不长的时间里掌握正则表达式的思想和技术精华,这一点
已经被很多人验证过,我本人也是这本书的受益者之一。正因为这本书独一无二的地位和高度的可读性,也因为正则表达式作为一项了不起的技术发明所具有的巨大
威力,我非常希望更多的读者能够通过认真地学习本书而掌握这一强大技术,并享受阅读的乐趣。

<<精通正在表达式>> 书评的更多相关文章

  1. 《嫌疑人X的献身》书评

    <嫌疑人X的献身>是日本著名推理小说作家东野圭吾的代表作之一.1985年东野圭吾以一本<放学后>出道,出道初期善于写精巧细致的本格推理,后期文笔愈发老辣.简练.2005年东野圭 ...

  2. 东野圭吾--嫌疑人X的献身读后感

    经推荐,打算看日本大作家东野圭吾的<嫌疑人X的献身>.书很薄,八开大小的书两百多页,一下午的时间差不多就能读完.读了前面几章,代入感很强,压抑浓郁的气氛着实让人难受,所以打算先看一下电影, ...

  3. 扒一扒自从买了kindle后看的书

    一.<性别战争> 讲述的是动物界各类动物的xxx(你懂的),以动物拟人化的口吻来进行问答,十分的生动形象,虽说和自己的生活没有多大联系,但是偶尔了解一下,也是意外的不错的感觉. 二.< ...

  4. Movie

    情书   av1300192最完美的离婚  av1304160梦旅人 av1126580NANA真人版电影  av1608482为了N  av1815256恋爱写真  av710199笃姬  搜狐天皇 ...

  5. CXF(2.7.10) - RESTful Services

    1. 定义 JavaBean.注意 @XmlRootElement 注解,作用是将 JavaBean 映射成 XML 元素. package com.huey.demo.bean; import ja ...

  6. Java的暑期作业

    Java暑期作业 一.<恶意>读书笔记 <恶意>是日本作家东野圭吾写的推理小说之一.看完后不禁为东野先生的奇特的写作手法以及书中所展现的人性的丑恶所震撼.我认为这本书相较< ...

  7. 欢迎访问我的独立博客 tracefact.net (2019.1.30)

    欢迎访问我的独立博客 tracefact.net 长期以来,我都同时维护着两个博客,博客园和 tracefact.net,感觉有点分散精力,所以博客园以后不再每篇文章都同步更新了. 我会挑个别比较好的 ...

  8. kindle完结书单

    1.一个人的好天气---青山七惠 2.嫌疑人X的献身---东野圭吾 3.活着---余华 4.最漫长的旅行---Nicholas Sparks 5.解忧杂货店---东野圭吾 6.追风筝的人---卡勒德· ...

  9. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  10. 初学html,任务1:一个简单html页面,要求:内容页面装一篇文章 用html来分段

    这是主要内容部分,用html实现版块分布. 接下来是样式部分. 让页面所有元素的padding和margin都设置为0 : 否则加入一张大的覆盖的背景图片后,会由于浏览器的缘故,图片周边有白边: 设置 ...

随机推荐

  1. 067——VUE中vue-router之使用transition设置酷炫的路由组件过渡动画效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Vue SSR的渲染性能

    一.前言 前端技术年年有新宠,Vue.js 2.0以其轻量级.渐进式.简洁的语法在MVVM框架中脱颖而出,一经推出便很受业界青睐. 为了提高首屏渲染速度 缓存+直出 是必不可少的.在Vue 1× 时代 ...

  3. bzoj1607

    题解: 帅选法 把相同的放在一起 代码: #include<bits/stdc++.h> using namespace std; ; int n,a[N],s[N],M,ss[N]; i ...

  4. SpringContextUtil spring上下文获取工具类

    package com.midea.biz; import org.springframework.beans.BeansException; import org.springframework.c ...

  5. 在linux中使用终端浏览器w3m

    w3m是一个基于文本的网页浏览器,支持多种操作系统,在命令行终端可以很好的支持中文.即使在没有鼠标支持的情况下也可以检查网页的输出. 1. 安装w3m $ sudo apt install w3m 2 ...

  6. OpenCV 图像旋转实现

    1 旋转矩形 首先建议阅读图像旋转算法原理-旋转矩阵,这篇博客可以让你很好地理解图像中的每一个点是如何进行旋转操作的.其中涉及到了图像原点与笛卡尔坐标原点之间的相互转换以及点旋转的一些公式推导. 这里 ...

  7. [LeetCode&Python] Problem 559. Maximum Depth of N-ary Tree

    Given a n-ary tree, find its maximum depth. The maximum depth is the number of nodes along the longe ...

  8. TP框架连接mongodb报错及解决办法

    mongodb版本3.4.7 1.认证错误:Failed to connect to: localhost:27017: Authentication failed on database 'test ...

  9. HDU 4548:美素数

    Problem Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识. 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素 ...

  10. Rx.NET响应式编程

    响应式编程 Rx.NET 了解下 1. 引言 An API for asynchronous programming with observable streams.ReactiveX is a co ...