精通正则表达式(第3版)_带书签_高清完整版

所需积分/C币:10 2017-11-09 23:17:00 44.96MB PDF

[美] Friedl J.E.F 著;余晟 译 ISBN:9787121046841
精通正则表达式 (第3版 Mastering Regular Expressions, 3rd Edition [美] Jeffrey E F. Friedl著 余晟译 電子工業出版补 Publishing House of Electronics Industry 北京· BEIJING 0 Reilly media,nc介绍 为了满足读者对网络和软件技术知识的迫切需求,世界著名计算机图书出版 机构 O Reilly Media,inc,授权电子工业出版社,翻译出版一批该公司久负盛 名的英文经典技术专著。 o' Reilly media,inc.是世界上在Umix、X、 Internet和其他开放系统图书领域 具有领导地位的出版公司,同时也是在线出版的先锋。 从最畅销的巛 The Whole internet User' s Guide& Catalog》(被纽约公共图书馆 评为20世纪最重要的50本书之一)到GNN(最早的 IInternet门户和商业网站), 再到 Website(第一个桌面PC的Web服务器软件),O' Reilly media,lnc 直处于 Internet发展的最前沿。 许多书店的反馈表明, O'Reilly Media,Inc.是最稳定的计算机图书出版商 每一本书都一版再版。与大多数计算机图书出版商相比, O Reilly media,lne. 具有深厚的计算机专业背景,这使得O' Reilly media,Inc.形成了一个非常不 同于其他出版商的出版方针。 O'Reilly Media,Inc.所有的编辑人员以前都是 程序员,或者是顶尖级的技术专家。O' Reilly media,nc还有许多固定的作者 群体—他们夲身是相关领域的技术专家、咨询专家,而现在编写著作, OReilly Media,Inc.依靠他们及时地推出图书。因为 O Reilly media,lne紧密 地与计算机业界联系着,所以O` Reilly media,inc.知道市场上真正需要什么 图书。 推荐序 夫当关 rT产业新技术日新月异,令人目不暇接,然而在这其中,真正能称得上伟大的东西却实宫 无几。1998年,被誉为“软件世界的爱迪生”,发明了BSD、TCPP、c$h、ⅵ和NFS的SUN 首席科学家 Bill Joy曾经不无调侃地说,在计算机体系结构领域里,缓存是唯一能称得上伟 大的思想,其他的一切发明和技术不过是在不同场景下应用这一思想而已。在计算机软件 领域里,情形也大体相似。如果罗列这个领域中的伟大发明,我相信绝不会超过二十项。 在这个名单当中,当然应该包括分组交换网络、Web、Lisp、哈希算法、UNⅨX、编译技术、 关系模型、面向对象、XML这些大名黑鼎的家伙,而正则表达式也绝对不应该被漏掉。正 则表达式具有伟大技术发明的一切特点,它简单、优美、功能强大、妙用无穷。对于很多 实际工作来讲,正则表达式简直是灵丹妙药,能够成百倍地提高开发效率和程序质量。CSDN 的创始人蒋涛先生在早年开发专业软件产品时,就曾经体验过这一工具的巨大威力,并且 直印象深刻。而我的一位从事网络编辑工作的朋友,最近也领略了正则表达式的威力 他用Pel开发了一个不足20行的小程序,使用正则表达式将项原本每天耗用10人时的 工作在一分钟之内自动完成。而正则表达式在生物信息学和人类基因图谱的研究中所发挥 的关键作用,更是被传为佳话。无论对于软件开发者,还是从事其他知识工作的专业人士, 正则表达式都是最有利的工具之一。 所谓正则表达式,就是一种描述字符串结构模式的形式化表达方法。在发展的初期,这套 方法仅限于描述正则文本,故此得名正则表达式( regular expression)”。随着正则表达式 研究的深入和发展,特别是Perl语言的实践和探索,正则表达式的能力已经大大突破了传 统的,数学上的限制,成为威力巨大的实用工具,在几乎所有主流语言中获得支持。为什 么正则表达式具有如此巨大的魅力?一方面,因为正则表达式处理的对象是字符串,或者 抽象地说,是一个对象序列,而这恰恰是当今计算机体系的本质数据结构,我们围绕计算 机所做的大多数工作,都归结为在这个序列上的操作,因此,正则表达式用途广阔。另一 方面,与大多数其他技术不同,正则表达式具有超强的结构描述能力,而在计算机中,正 是不同的结构把无差别的字节组织成千差万别的软件对象,再组合成为无所不能的软件系 统,因此,描述了结构,就等于描述了系统。在这方面,正则表达式的地位是独特的。正 因为这两点,在现在的软件开发和日常数据处理工作中,正则表达式已经成为必不可少的 工具。如果一个开发工具不支持正则表达式,那它就会被视为玩具语言,如果个编辑器 推荐序 不支持正则表达式,那它就会被成为阳春应用。连人们原本并不指望应用正则表达式的商 用数据库,各家厂商也竞相以攴持正则表达式为卖点。正则表达式的声势之隆,是毋庸置 疑的。 非常奇怪的是,这样一个了不起的技术,在我国却并没有得到充分推广。以其价值而言, 正则表达式不但值得每一个专业程序员掌握,而且值得所有知识工作者去了解。然而现实 情况是,不但一般知识工作者大多闻所未闻,很多专业程序员也视之为畏途。为什么会出 现这种情况呢?原因有二。其一,正则表达式产生和发展在UNX文化体系之中,而我国 软件开发社群的知识结构长期受到微软的决定,UNX文化影响甚微。在2002年推出NET 平台之前,微软在其各项主流平台、产品与开发工具当中,均未对正则表达式给予足够的 重视,相应地,我们的开发者们对正则表达式也就知之不多。第二,也是更重要的原因, 就是正则表达式并不是那么好掌握的,在通向驾驭正则表达式强大力量的道路上,还是有 那么几只拦路虎的,而要打虎过岗,不但要花点功夫,还要有正确的方法。 学习正则表达式,入门不难,看一些例子,试着模仿模仿,就可以粗通,并且在工作中解 决不少问题。然而大部分学习者也就就此止步,他们对自己说:“正则表达式不过如此,我 就学到这里了,以后现用现学就行了。”他们以为自己可以像学习其他技术一样,在实践中 逐渐提高正则表达式的应用水平。然而事实上,正则表达式并不是每天都会用到,而其密 码般的形象,随着时间的推移很容易被忘记,所以经常发生的情况是,开发者对于正则表 达式的记忆迅速消褪,每次遇到新的问题,都要查资料,重新唤回记忆,对于稍微复杂 点的问题,只好求助于现成的解决方案。反反复复,长期如此,不但应用水平难以明显提 升,而且会对这项技术逐渐产生一定的恐惧感和厌烦情绪。这还只是应用阶段,正则表达 式应用的高级阶段,要求开发者还必须充分理解正则表达式的能力范围,能够将一些正则 表达式技术组合应用,达成超乎一般想像的效果。为了高效、正确地解决实际问题,有的 时候甚至要求深入理解正则表达式的原理,甚至对于如何实现正则表达式引擎都要有所了 解,在此基础上,规避陷阱,优化设计,提高程序执行效率。要达到这样的程度,不经过 系统的学习是不可能的。 系统学习正则表达式并不是一件容易的事情,仅仅通过阅读一些“ HOW TO”的快餐式文章是 不行的,必须有更完整、更系统的资料指导学习。如果你在国外技术社区里询问如何才能 系统学习正则表达式,几乎所有的领域专家都会向你推荐一本书—— Jeffrey Fried的《精通 正则表达式》,也就是本书。 这本《精通正则表达式》是系统学习正则表达式的唯一最权威著作。可以说,在今天,如 果想理解和掌握正则表达式,想要建立关于这一技术的完整概念体系,想充分发挥其巨大 能量,这本书几乎是无法绕开的必经之路。甚至可以说,如果你没有读过这本书,那么你 推荐序 vIl 对于正则表达式的理解和应用能力一定达不到升堂入室的程度。本书第1版出版于十年之 前,自那时起它就成为正则表达式领域最全面、最受欢迎的代表著作,数以万计的读者通 过这本书掌握了正则表达式,成为行家里手。在任何时候,任何地方,只要提到正则表达 式著作,人们都会提到这本书。这本书的质量之高,声誉之盛,使得几乎没有人企图挑战 它的地位,从而在正则表达式图书领域形成独特的一夫当关的局面,称其为正则表达式圣 经,绝对当之无愧。 为什么这本书能够表现得如此出色?我认为这其中有三个原因。其一,作者本人具有多年 程序开发经验,理论基础深厚,实战经验丰富,对正则表达式这个主题透彻理解,因此在 技术上得心应手,底气十足,对于技术上的难点不回避、不含糊。作者高超的技术水平是 本书质量的强大保证。其二,作者思路对头,素材组织得当,用例丰富。正则表达式根植 于数学理论,却又能在日常俗事上发挥巨大的效用。写这种类型的技术,思路稍微一·偏差, 就可能走歪路,不是太理论,就是太琐碎,不是太枯燥,就是太浅薄,实在很难把。作 者清楚地认识到,这本书的读者不是计算机科学家,但也不是满足于“知其然而不知其所以 然的快餐式代码小子,而是具有一定理论素养,却又始终以实践为本的专业开发者。他们 需要的是面向实践的理论和思想,是实实在在的实战能力,只有满足这种需要,才能够真 正打动读者。通读此书,可以说作者对这一路线的把握十分成功,保证了内容大方向的正 确。其三,这本书的写法独具匠心,堪称典范。技术图书的主要使命是传播专业知识。而 专业知识分为框架性知识和具体知识。框架性知识需要通过系统的阅读和学习掌操,而大 量的具体知识,则主要通过日常工作的积累以及随用随查的的学习来逐渐填充起来。本书 前六章,以顺序式记述的方式,将正则表达式的系统知识娓娓道来,读者像看故事书似的 就建立起整个正则表达式的基本知识体系。而后面的内容,则是方便实际开发中频发查阅 之用,包括各大主流语言对正则表达式的支持细节,包含有大量案例。这样的写法,完全 符合一般人学习的特点,因此书读起来非常惬意,非常有趣,用的时候查起来又非常方便 这样的著述风格,实在值得学习。 读者可以在没有任何正则表达式的基础上开始阅读此书,只要勤动脑,加强理解,适当动 手练习,将能够在不长的时间里掌握正则表达式的思想和技术精华,这一点已经被很多人 验证过,我本人也是这本书的受益者之一。正因为这本书独一无二的地位和高度的可读性 也因为正则表达式作为一项了不起的技术发明所具有的巨大威力,我非常希望更多的读者 能够通过认真地学习本书而掌握这一强大技术,并享受这项技术带来的快乐。 孟若 2007年7月于北京 译者序 《精通正则表达式(第3版)》(即 Mastering Regular Expression,3 rd edition)是…本好书。 我还记得,自己刚开始工作时,就遇到了关于正则表达式的问题(从此被逼上梁山):若从 文本中抽取 E-mail地址,还可以用字符串来查找(先定位到@,然后向两端查找),若要抽 取URL,简单的文本查找就无能为力了。正当我一筹莫展之时,项目经理说:“可以用正则 表达式,去网上找找资料吧。”抱着这根救命稻草,我搜索了之前只是听说过名字的正则表 达式的资料,并打印了java.uti1. regex(开发用的Java)的文档来看。摸索了半天,我 的感觉就是,这玩意儿,真神奇,真复杂,真好用。 此后,用到正则表达式的地方越来越多,我也越来越感觉到它的重要,然而使用起来却总 感觉捉襟见肘。当时是夏天,北京非常热,我决定下班之后不再着急赶车回家,而是在公 司安心看看技术文档,于是邂逅了这本 Mastering Regular Expression。该书原文是相当通畅 易懂的,看完全书大概花了我一周的业余时间,之后便如拨云见日,感觉豁然开朗原 来正则表达式可以这样用,真是奇妙,令人拍案叫绝。 此后我运用正则表达式便不用再看什么资料了,充其量就是查查语言的具体文档,表达式 的基本模型和思路,完全是在阅读本书时确立的。也正是因为细心阅读过本书,所以有时 我能以正则表达式解决某些复杂的问题。我的朋友郝培强( Tinyfool,昵称Tiny)曾问过我 这样一个正则表达式的问题:在 Apache服务器的 Rewrite规则中,怎样以一个正则表达式 匹配“除两个特定子域名之外的所有其他子域名”,其他人的办法都无法满足要求:要么只 能匹配这两个特定的子域名,要么必须依赖程序分支才能进行判断。其实这个问题,是可 以用一个正则表达式匹配的。事后,Tiny说,看来,会用正则的人很多,但真正懂得正 的人很少。现实情况也确实如此,就我所见,不少同仁对正则表达式的运用,大多是从网 上找些现成的表达式,套用在自己的程序中,但对到底该用几个反斜线转义,转义是在字 符申级别还是表达式级别进行的,捕获型括号是否必须,表达式的效率如何,等等问題 往往都是一知半解,甚至毫无概念,在Tny的问题面前,更是束手无策,一筹莫展。 就我个人来说,我所掌握的正则表达式的知识,绝大多数来自本书。正是依靠这些知识, 我几乎能以正则表达式进行自己期望的任何文本处理,所以我相信,能够耐心读完这本书 的读者,一定能深入正则表达式的世界,若再加以练习和思考,就能熟练地依靠它解决各 种复杂的问题(其中就包括类似Tny的问题)了 译者序 去年,通过霍炬( Virushuo)的介绍,我参加了博文视点的试译活动,很幸运地获得了翻译 本书的机会。有机会与大家分享这样一本好书,我深感荣幸。500多页的书,拖拖拉拉,也 花了半年多的时间。虽然之前读过原著,积累了一些运用正则表达式的经验,也翻译过数 十万字的资料,但要尽可能准确、贴切地传达原文的阅读感觉,我仍感颇费心力。部分译 文在确认理解原文的基础上,要以符合中文习惯的方式加以表述仍然颇费周折(例如,直 译的“正则表达式确实容许出现这种错误”,原文的意思是“这样的错误超出了正则表达式 的能力”,最后修改为“出现这样的错误,不能怪正则表达式”或“这样的问题,错不在正 则表达式”)。另有部分词语,虽可译为中文,但为保证阅读的流畅,没有翻译(例如,“它 包含特殊和一般两个部分,特殊部分之所以是特殊的,原因在于……”,此处 pecial和 normal 是专指,故翻译为“它包含spel和noma两个部分, special部分之所以得名,原因在 于 这样的处理,相信不会影响读者的理解 在本书翻译结束之际,我首先要感谢霍炬,他的引荐让我获得了翻译这本书的机会;还要 感谢博文视点的周筠老师,她谨慎严格的工作态度,时刻提醒我不能马虎对待这本经典之 作;还有本书的责编晓菲,她为本书的编辑和校对儆了大量细致而深入的工作。 另外我还要感谢东北师范大学文学院的王确老师,在我求学期间,王老师给予我诸多指点, 离校时间愈长,愈是怀念和庆幸那段经历,可以说,没有与他的相识,便没有我的今天。 翻译过程中,我虽力求把握原文,语言通畅,但翻译中的错误或许是在所难免的,对此本 人愿负全部责任。希望广大读者发现错误能及时与我和出版社联系以便重印时修正,或是 以勘误的形式公布出来以惠及其他读者。如果读者有任何想法或建议,欢迎给我写信,我 的邮件地址是:yushengregex@egmail.com 如今正则表达式已经成为几乎所有主流编程语言中的必备元素:Java、Perl、 Python、PHP, Ruby……莫不如此,甚至功能稍强大一些的文本编辑工具,都支持正则表达式。尤其是在 Web兴起之后,开发任务中的一大部分甚至全部,都是对字符串的处理。相比简单的宇符 串比较、查找、替搀,正则表达式提供了强大得多的处理能力(最重要的是,它能够处理 符合某种抽象模式”的字符串,而不是固化的、具体的字符串)。熟练运用它们,能够节 省大量的开发时间,甚至解决一些之前看来是 mission impossible的问题。 本书是讲解正则表达式的经典之作。其他介绍正则表达式的资料,往往局限于具体的语法 和函数的讲解,于语法细节处着墨太多,忽略了正则表达式本身。这样,读者虽然对关于 正则表达式的具体规定有所了解,但终究是只见树木不见森林,遇上复杂的情况,往往束 手无策,举步维艰。而本书自第1版开始便着力于教会读者“以正则表达式来思考( think regular expression)”,向读者讲授正则表达式的精髓(正则表达式的各种流派、匹配原理 优化原则,等等),而不拘泥于具体的规定和形式。了解这些精髓,再辅以具体操作的文档, 译者序 读者便可做到“胸中有丘壑,下笔如有神”;即便问题无法以正则表达式来解决,读者也能 很快作出判断,而不必盲目尝试,徒费工大。 不了解正则表达式的读者,可循序渐进,依次阅读各章,即便之前完全未接触过正则表达 式,读过前两章,也能在心中描绘出概略的图谱。第3、4、5、6章是本书的重点,也是核 心价值所在,它们分别介绍了正则表达式的特性和流派、匹配原理、实用诀窍以及调校措 施。这样的知识与具体语言无关,适用于几乎所有的语言和工具(当然,如果使用DFA引 擎,第6章的价值要打些折扣),所谓“大象无形”,便是如此。读者如能仔细研读,悉心 揣摩,之后解决各种问题时,必定获益匪浅。第7、8、9、10章分别讲解了Perl、Java、NET、 PHP中正则表达式的用法,看来类似参考手册,其实是对前面4章知识的包装,将抽象的 知识辅以具体的语言规定,以具体的形式表现出来。所以,心急的读者,在阅读这些章节 之前,最好先通读第3、4、5、6章,以便更好地理解其中的逻辑和思路 相信仔细阅读完本书的读者,定会有登堂入室的感觉。不但能见识到正则表达式各种令人 眼花缭乱的特性,更能够深入了解表达式、匹配、引擎背后的原理,从而写出复杂、神奇 而又高效的正则表达式,快速地解决工作中的各种问题 余晟 2007年6月于北京

...展开详情
试读 127P 精通正则表达式(第3版)_带书签_高清完整版
img
e98123

关注 私信 TA的资源

上传资源赚积分,得勋章
    最新推荐
    精通正则表达式(第3版)_带书签_高清完整版 10积分/C币 立即下载
    1/127
    精通正则表达式(第3版)_带书签_高清完整版第1页
    精通正则表达式(第3版)_带书签_高清完整版第2页
    精通正则表达式(第3版)_带书签_高清完整版第3页
    精通正则表达式(第3版)_带书签_高清完整版第4页
    精通正则表达式(第3版)_带书签_高清完整版第5页
    精通正则表达式(第3版)_带书签_高清完整版第6页
    精通正则表达式(第3版)_带书签_高清完整版第7页
    精通正则表达式(第3版)_带书签_高清完整版第8页
    精通正则表达式(第3版)_带书签_高清完整版第9页
    精通正则表达式(第3版)_带书签_高清完整版第10页
    精通正则表达式(第3版)_带书签_高清完整版第11页
    精通正则表达式(第3版)_带书签_高清完整版第12页
    精通正则表达式(第3版)_带书签_高清完整版第13页
    精通正则表达式(第3版)_带书签_高清完整版第14页
    精通正则表达式(第3版)_带书签_高清完整版第15页
    精通正则表达式(第3版)_带书签_高清完整版第16页
    精通正则表达式(第3版)_带书签_高清完整版第17页
    精通正则表达式(第3版)_带书签_高清完整版第18页
    精通正则表达式(第3版)_带书签_高清完整版第19页
    精通正则表达式(第3版)_带书签_高清完整版第20页

    试读已结束,剩余107页未读...

    10积分/C币 立即下载 >