孟岩ID:myan
[修改头像]
1552962次访问,排名6好友1人,关注者32
总是在思考存在的问题
myan的文章
原创 146 篇
翻译 0 篇
转载 3 篇
评论 5196 篇
最近评论
lschou520:怎么会忘记印度、日本和欧洲呢?
daijunhua:支持,中华儿女,互相护持地走!
ranzj:我只抱怨自己的努力不够。
ranzj:我毫不怀疑 SilverLight 是个“钱”途无量的玩意儿。
winvc:还有 之前已经看到过一篇署名孟岩的文章了 也是自称学计算机的 在MOP发的文章 题目是《不知名的程序员写给想学编程的朋友》(最后署名前还特别声明了下自己是初中文化全靠自学的 大哥 这样的人全国有几千万 没几个比你这种货色差的)

那文章是看的我想吐 不知道是你还是重名了 不过咋跟你这篇文章风格这么像呢 都是不懂 逻辑混乱 瞎喷
你是自己想不明白问题 但认为自己想……
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    测试
    友情链接
    老赵的博客
    存档

    原创 《精通正则表达式》书评

    新一篇: 革命就是革命,不用遮遮掩掩

         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的《精通正则表达式》,也就是本书。

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

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

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

    发表于 @ 2007年07月23日 18:37:00|评论(loading...)|编辑

    旧一篇: 推开革命的三重门(《程序员》第八期卷首语)

    评论

    #还在吃草 发表于2007-07-24 10:35:49  IP: 222.129.18.*
    一本像参考手册的书 能牛到哪去?
    #idau7 发表于2007-07-25 12:40:07  IP: 220.249.88.*
    "正则表达式并不是每天都会用到,而其密码般的形象,随着时间的推移很容易被忘记"


    确实啊. 记得刚毕业的时候对这东西挺熟悉的, 还分析了在不同的环境里面对正则语法的支持, 现在回头想, 恍如隔世般... 没什么印象了, 还记得个. ? *了, 哈哈哈.

    #jams.lee 发表于2007-07-25 19:28:31  IP: 221.223.146.*
    "在这个名单当中,当然应该包括分组交换网络、Web、Lisp、哈希算 法、UNIX、编译技术、关系模型、面向对象、XML这些大名鼎鼎的家伙,而正则表达式也绝对不应该被漏掉。"
    正则表达式是不是应该属于编译技术呀.
    #uuq 发表于2007-07-25 20:38:26  IP: 123.116.98.*
    不知书什么时候出来
    #myan 发表于2007-07-26 08:39:23  IP: 221.218.165.*
    to jams.lee:
    与正则表达式对应的应该是程序设计语言,而不是编译原理。实现正则表达式的技术与编译原理相通,但不能把螺丝刀和机床混为一谈。
    #wangdengwu 发表于2007-07-26 08:48:50  IP: 60.213.186.*
    早就想好好学学正则表达式,可惜不知道看什么书
    有机会买本看看
    #sam 发表于2007-07-26 08:49:47  IP: 219.127.170.*
    TCP/IP虽然joy写得最好, 但说是他发明的不合适吧。BSD是一个合作项目, JOY只是主要开发者之一而已。实话实说,vi, c shell和jini倒是他的原创。
    #1000copy 发表于2007-07-26 21:58:05  IP: 222.210.93.*
    1. 我的理解

    正则表达式 之于 文本
    可以对应于
    sql 之于 关系数据库

    大部分商业程序都离不开关系数据库,可以说关系数据库集成了大量的现代计算技术,数据结构和算法。相比之下Windows编程对管道,TExtReport这样unix常见的模式没有那么多的依赖。因此正则表达式远远不如sql普及。

    2. >> 非常奇怪的是,这样一个了不起的技术,在我国却并没有得到充分推广

    这没有什么奇怪的,倒是针对“微软在其各项主流平 台、产品与开发工具当中,均未对正则表达式给予足够重视”为什么不去奇怪一下。

    正如五笔那么快速,为什么没有拼音普及一样。可见,技术仅仅专业是不够的,还需要简单。

    3. 》》如果一个开发工具不支持正则表达式,那它就会被视为玩具语言,

    delphi 官方的发布内部没有正则表达式的支持,也没有那个把它当成玩具用。



    #sevencat 发表于2007-07-27 10:18:35  IP: 124.243.200.*
    学习正则表达式最好的是那个叫RegexBuddy的工具。
    他可以界面化帮你做很多东东,还可以帮你生成c,c++,delphi,c#,java的regex的框架代码。

    最出名的类库应该还是pcre,boost的regex自己的功能测试都说慢。
    #sevencat 发表于2007-07-27 10:20:33  IP: 124.243.200.*
    至于工具,grep工具就是一个我们常用的,可惜的是没有好用的GUI界面,有时候我得去用gexpert的。
    可以把grep集成到各大开发工具中去。delphi里也有个。
    #ursb 发表于2007-07-28 00:22:58  IP: 125.89.16.*
    shut up 孟sir
    #Wisdom 发表于2007-07-29 18:52:38  IP: 59.56.38.*
    看过英文版, 没传说中的那么牛
    #dali 发表于2007-07-30 09:34:22  IP: 218.247.158.*
    孟托
    #liqix 发表于2007-07-30 12:14:40  IP: 60.209.42.*
    perl的最强大,顶顶顶
    #yongfa365 发表于2007-08-02 10:25:48  IP: 221.221.119.*
    虽然我只学会了一点点,但真像作者所说"使用正则表达式将一项原本每天耗用10个人时的工作在一分钟之内自动完成"
    实在是太方便了。

    有兴趣的可以看看这个
    http://www.yongfa365.com/software/正则表达式启示录.rar
    #yongfa365 发表于2007-08-02 10:27:48  IP: 221.221.119.*
    也可以看看这个

    正则表达式简单应用 - 柳永法(yongfa365)'Blog
    http://www.yongfa365.com/blog/item/03f0fa3acb0f361d.htm

    真是非常方便的东西
    #program_net 发表于2007-08-02 15:57:37  IP: 60.178.242.*
    非常好
    #missdeer 发表于2007-08-04 21:48:09  IP: 58.60.84.*
    原来C/C++是玩具语言啊?原来一直被人忽悠了~~
    #cdf 发表于2007-08-09 11:50:19  IP: 222.163.24.*
    为什么这么好的一本书没有中文版的啊...?哪位大虾可以翻译一下 我们也收益不浅哦
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 孟岩