这本书既是教程,又是参考手册,还可以当故事看,这取决于读者的阅读方式。熟悉正则表达式的读者可能会觉得,这本书马上就能当作一本详细的参考手册,读者可以直接跳到自己需要的章节。不过,我并不鼓励这样做。
要想充分利用这本书,可以把前6章作为故事来读。我发现,某些思维习惯和思维方式的确有助于完整的理解,不过最好还是从这几章的讲解中学习它们,而不是仅仅记住其中的几张列表。
故事是这样的,前6章是后面4章-一包括Perl.Java..NET和PHP--的基础。为了帮助读者理解每-部分,我交叉使用各章的知识,为了提供尽可能方便的索引,我投入了大量的精力(全书中有超过处交叉引用,它们以符号加页码的形式标注)。
在读完整个故事以前,最好不要把本书作为参考手册。在开始阅读之前,读者可以参考其中的表格,例如第92页的图表,想象它代表了需要掌握的相关信息。但是,还有大量背景信息没有包含在图表中,而是隐藏在故事里。读者阅读完整个故事之后,会对这些问题有个清晰的概念,哪些能够记起来,哪些需要温习。
全书共10章,可以从逻辑上粗略地分为三类,下面是总体概览。
导引
导引部分会把完全的门]外汉变成‘对问题有感觉”的新手。对正则表达式有一定经验的读者完全可以快速翻阅这些章节,不过,即使是对于相当有经验的读者来说,我仍然要特别推荐第3章。
第1章:介绍正则表达式的基本概念。
第1章是为完全的门外汉准备的。我以应用相当广泛的程序egrep为例来介绍正则表达式,我也提供了我的视角:如何“理解”正则表达式,来为后面章节所包括的高级概念打下坚实的基础。即使是有经验的读者,浏览本章也会有所收获。
第2章:考察利用正则表达式进行文本处理的过程。
第2章考察了支持正则表达式的程序设计语言的真实文本处理过程。附加的示例提供了后面章节详细讨论的基础,也展示了高级正则表达式调校背后的重要思考过程。为了让读者学会“正则表达式的套路”,这章出现了一-个复杂问题,并讲解了两种全然不相关的工具如何分别通过正则表达式来解决它。
第3章:提供对于特性和工具软件的概述以及简史。
第3章提供了当前经常使用的工具的多种正则表达式的概览。因为历史的混乱,当前常用的正则表达式的类型可能差异巨大。此章同时介绍了正则表达式以及使用正则表达式的工具的历史和演化历程。本章末尾也提供了“高级话题引导”。此引导是读者学习此后高级内容的路线图。
细节
了解了基础知识之后,读者需要弄明白“如何使用”及“这么做的原因.就像“授人以渔”的典故一样,真正懂得正则表达式的读者,能够在任何时间、任何地点应用关于它的知识。
第4章:揭示了正则表达式的工作原理的细节。
第4章循序渐进地导人本书的核心。它从实践的角度出发,考察了正则引擎真实工作的重要的内在机制。懂得正则表达式如何处理工作细节,对读者掌握它们大有裨益。
第5章:利用第4章的知识,继续学习各种例子。
第5章教育读者在高层次和实际的运用中应用知识。这一章会详细讲解常见(但复杂)的问题,目的在于拓展和深化读者对于正则表达式的认识。
第6章:详细讨论效率问题。
第6章考察真实生活中大多数程序设计语言提供的正则表达式的高效结果。本章运用第4章和第5章详细讲解的知识,来开发引擎的能力,并避免其中的缺陷。
特定工具的知识
学习完第4、5.6章的读者,不太需要知道特定的实现。不过,我还是用了4个整章来讲解4种流行的语言。
第7章:详细讲解Perl的正则表达式。
第7章详细讲解了Perl的正则表达式,Perl大概是目前最流行的主要的正则表达式编程语言。在Perl中,与正则表达式相关的操作符只有四个,但它们组合出的选项和特殊情形带来了大量的程序选项一同时还有陷阱。对没有经验的开发人员来说,这种极其丰富的选项能够让他们迅速从概念转向程序,当然也可能是雷场。本章的详细介绍有助于给读者指出一条光明大道。
第8章:讲解Sun提供的java.util.regex包。
第8章Java,详细介绍了java.util.regex包,从Java1.4以后,它已经成为了Java语言的标准部分。本章主要