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

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

    编辑推荐

    《精通正则表达式(第3版)》是正则这一万妙法门的经典名著,享誉海内外,中文版由IT世界的翻译奇才兼资深程序员余晟翻译。

    内容简介

    随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。《精通正则表达式(第3版)》是讲解正则表达式的经典之作。《精通正则表达式(第3版)》主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在perl、java、.net、php中的用法。

    作者简介

    作者:(美国)杰佛瑞E.F.佛瑞德(Jeffrey E.F.Friedl) 译者:余晟

    目录

    第1章 正则表达式入门

    第2章 入门示例拓展

    第3章 正则表达式的特征和流派概览

    第4章 表达式的匹配原理

    第5章 正则表达式使用技巧

    第6章 打造高效正则表达式

    第7章 Perl

    第8章 Java

    第9章 .NET

    第10章 PHP

    索引

    前言

    本书关注的是一种强大的工具——“正则表达式”。它将教会读者如何使用正则表达式解决各种问题,以及如何充分使用支持正则表达式的工具和语言。许多关于正则表达式的文档都没有介绍这种工具的能力,而本书的目的正是让读者“精通”正则表达式。许多种工具都支持正则表达式(文本编辑器、文字处理软件、系统工具、数据库引擎,等等),不过,要想充分挖掘正则表达式的能力,还是应当将它作为编辑语言的一部分。例如Java、JScript、VisualBasic、VBScript、JavaScript、ECMAScript、C、C 、C#、elisp、Perl、Python、Tcl、Ruby、PHP、sed和awk。事实上,在一些用上述语言编写的程序中,正则表达式扮演了极其重要的角色。正则表达式能够得到众多语言和工具的支持是有原因的:它们极其有用。从较低的层面上来说,正则表达式描述的是一串文本(achunkoftext)的特征。读者可以用它来验证用户输入的数据,或者也可以用它来检索大量的文本。从较高的层面上来说,正则表达式容许用户掌控他们自己的数据——控制这些数据,让他们为自己服务。掌握正则表达式,就是掌握自己的数据。

    本书的价值TheNeedforThisBook
    本书的第1版写于1996年,以满足当时存在的需求。那时还没有关于正则表达式的详尽文档,所以它的大部分能力还没有被发掘出来。正则表达式文档倒是存在,但它们都立足于“低层次视角”。我认为,那种情况就好像是教一些人英文字母,然后就指望他们会说话。第2版与第1版间隔了五年半的时间,这期间,互联网迅速流行起来,正则表达式的形式也有了极大的扩张,这或许并不是巧合。几乎所有工具软件和程序语言支持的正则表达式也变得更加强大和易于使用。Perl、Python、Tcl、Java和VisualBasic都提供了新的正则支持。新出现的支持内建正则表达式的语言,例如PHP、Ruby、C#,也已经发展壮大,流行开来。在这段时间里,本书的核心——如何真正理解正则表达式,以及如何使用正则表达式——仍然保持着它的重要性和参考价值。不过,第1版已经逐渐脱离了时代,必须加以修订,才能适应新的语言和特性,也才能对应正则表达式在互联网世界中越来越重要的地位。第2版出版于2002年,这一年的里程碑是java.util.regex、Microsoft.NETFramework和Perl5.8的诞生。第2版全面覆盖了这些内容。关于第2版,我唯一的遗憾就是,它没有提及PHP。自第2版诞生以来的4年里,PHP的重要性一直在增加,所以,弥补这一缺憾是非常迫切的。第3版在前面的章节中增加了PHP的相关内容,并专门为理解和应用PHP的正则表达式增加了一章全新的内容。另外,该版对Java的章节也进行了修订,做了可观的扩充,反映了Java1.5和Java1.6的新特性。

    目标读者IntendedAudience
    任何有机会使用正则表达式的人,都会对本书感兴趣。如果您还不了解正则表达式能提供的强大功能,这本书展示的全新世界将会让您受益匪浅。即使您认为自己已经是掌握正则表达式的高手了,这本书也能够深化您的认识。第1版面世后,我时常会收到读者的电子邮件反映说“读这本书之前,我以为自己了解正则表达式,但现在我才真正弄明白”。以与文本打交道为工作(如Web开发)的程序员将会发现,这本书绝对称得上是座金矿,因为其中蕴藏了各种细节、暗示、讲解,以及能够立刻投入到实用中的知识。在其他任何地方都难以找到这样完整而详尽的资料。正则表达式是一种思想——各种工具以各种方式(数目远远超过本书的列举)来实现它。如果读者理解了正则表达式的基本思想,掌握某种特殊的实现就是易如反掌的事情。本书关注的就是这种思想,所以其中的许多知识并不受例子中所用的工具软件和语言的束缚。

    如何阅读HowtoReadThisBook
    这本书既是教程,又是参考手册,还可以当故事看,这取决于读者的阅读方式。熟悉正则表达式的读者可能会觉得,这本书马上就能当作一本详细的参考手册,读者可以直接跳到自己需要的章节。不过,我并不鼓励这样做。要想充分利用这本书,可以把前6章作为故事来读。我发现,某些思维习惯和思维方式的确有助于完整的理解,不过最好还是从这几章的讲解中学习它们,而不是仅仅记住其中的几张列表。故事是这样的,前6章是后面4章——包括Perl、Java、.NET和PHP——的基础。为了帮助读者理解每一部分,我交叉使用各章的知识,为了提供尽可能方便的索引,我投入了大量的精力(全书中有超过1200处交叉引用,它们用符号加页码的形式标注)。在读完整个故事以前,最好不要把本书作为参考手册。在开始阅读之前,读者可以参考其中的表格,例如第92页的图表,想象它代表了需要掌握的相关信息。但是,还有大量背景信息没有包含在图表中,而是隐藏在故事里。读者阅读完整个故事之后,会对这些问题有个清晰的概念,哪些能够记起来,哪些需要温习。

    在线试读

    一种类型的环视叫“顺序环视(lookahead)”,作为表达式的一部分,顺序环视顺序(从左至右)查看文本,尝试匹配子表达式,如果能够匹配,就返回匹配成功信息。肯定型顺序环视(positivelookahread)用特殊的序列(?=…)来表示,例如(?=\d),它表示如果当前位置右边的字符是数字则匹配成功。另一种环视称为逆序环视,它逆序(从右向左)查看文本。它用特殊的序列(?<=…)表示,例如(?<=\d),如果当前位置的左边有一位数字,则匹配成功(也就是说,紧跟在数字后面的位置)。

    环视不会“占用”字符

    在理解顺序环视和其他环视功能时需要特别注意一点,即在检查子表达式能否匹配的过程中,它们本身不会“占用”任何文本。这可能有点难懂,所以我准备了下面的例子。正则表达式Jeffrey匹配:

    但同样的正则表达式,如果使用顺序环视功能,即(?=Jeffrey),则匹配标记的位置:

    顺序环视会检查子表达式能否匹配,但它只寻找能够匹配的位置,而不会真正“占用”这些字符。不过,把顺序环视和真正匹配字符的部分——例如Jeff——结合起来,我们能得到比单纯的Jeff更精确的结果。结合之后的正则表达式是(?=Jeffrey)Jeff,下一页的图说明,它只能匹配“Jeffrey”这个单词中的“Jeff”。它能够匹配:

    在此处它的匹配和单纯的Jeff一样,但是下面的情况不会匹配:

    Jeff自己能够匹配这一行,但是因为不存在(?=Jeffrey)能够匹配的位置,整个表达式就无法匹配。现在环视的好处还看得不是很明显,但是请不用担心,现在我们只需要关心顺序环视的原理——我们很快会遇到能够充分展现其价值的例子。

    获取正版《精通正则表达式》直达购买
    • 微信号
    • 网站问题、用户注册登录请联系站长,看到第一时间及时回复。
    • weinxin
    • 公众号
    • 慧眼看每日荐书,关键字找书,新功能陆续增加中,敬请关注!
    • weinxin
    huiyan
    • 本文由 发表于 2019-05-3014:52:35
    • 转载请务必保留本文链接:https://www.huiyankan.com/2019053014557.html