精通正则表达式(第三版)

所需积分/C币:21 2017-12-26 17:17:33 45.17MB PDF

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

...展开详情

评论 下载该资源后可以进行评论 1

tequliapop 只有一级书签。
2019-01-31
回复
img

关注 私信 TA的资源

上传资源赚积分,得勋章
相关内容推荐