作者:empty 页数:473 出版社:empty |
正则表达式在过去十多年间越来越普及。如今所有常用的编程语言都会包含一个强大的正则表达式函数库,或者甚至是在语言本身就内嵌了对于正则表达式的支持。许多开发人员都会利用这些正则表达式的功能,在应用程序中为用户提供使用正则表达式对其数据进行查找或者过滤的能力。正则表达式真正是无处不在。随着正则表达式的广泛采用,出现了许多相关的著作。大多数这类书籍都很好地讲解了正则表达式的语法,并且还会提供一些例子以及参考文献。然而,我们还没有看到有任何一本书能够面向现实世界中使用的计算机, 以及在各种Internet应用中遇到的实际问题, 为读者提供基于正则表达式的解决方案。因此, 本书作者Steve和Jan决定写一本书来填补这种空白。
我们特别期望能够展现给读者的是:如何使用正则表达式来解决那些对正则表达式经验较少的人们认为无法解决的问题,以及软件纯粹主义者认为不能用正则表达式来解决的问题。因为如今正则表达式无处不在,所以它们通常可以作为工具,直接被最终用户使用,而不需要程序员团队的参与。即使是对于程序员来说,常常也可以在信息检索和更新的任务中采用一些正则表达式来节省大量时间,因为这些功能如果使用过程式代码来实现,可能就会需要几个小时甚至几天的时间,也可能会由于需要采用第三方的函数库,而不得不经过事先审查和经理层的审批。不同版本带来的问题
与IT业界流行的东西一样,正则表达式也拥有许多种不同的实现,以及不同程度的兼容性。这就出现了许多不同的正则表达式流派(flavor) , 它们在处理一个特定正则表达式的时候并不总是拥有完全一样的表现,有时候甚至会无法正常使用。在许多书中的确也提到了目前存在的不同流派,并且指出了其中的一些区别。但是,如果某种流派缺少特定功能的时候,它们通常会选择在这里或那里略掉一些流派,而不是为之提供可替代的解决方案或者是应急方案。而当你不得不在不同的应用程序或者不同程序语言中使用不同的正则表达式流派的时候,就会感到很受挫折。在文献中常常会看到一些不严格的表达, 例如“所有人现在都在使用Perl风格的正则表达式”, 不幸的是这种说法会把很大范围的不兼容性边缘化。即使是“Perl风格”的函数库也可能会有显著的区别, 而且与此同时Perl也在持续不断地演化。一旦拥有了这种过度简单化的印象,就可能会导致有些程序员浪费长达半个小时的时间来运行调正则表达式经典实例
前言试器却得不到任何结果,而不是去认真检查他们的正则表达式的实现细节。即使当他们发现所依赖的一些功能不存在的时候,也不一定总是知道该如何找到解决方案。本书是市场上能看到的第一本讨论功能强大的各种常见正则表达式流派的书,并且本书从头到尾都会坚持这样的原则。目标读者如果你经常在计算机上处理文本,不管是搜索一大堆的文档,在文本编辑器中处理文本,抑或是开发需要搜索或处理文本的软件,都应该认真读一读这本书。正则表达式对于上述这些工作来说是一个非常优秀的工具。本书会教给你需要了解的关于正则表达式的所有东西,你不需要任何先前的经验。因为我们会从关于正则表达式的最基本的概念开始讲起。如果你已经拥有关于正则表达式的经验,那么你会看到在其他教材和网上文章中经常一带而过的大量细节。如果你曾经遭遇过正则表达式在一个应用程序中可用,而在另外一个程序中不可用的情形,那么就会因为本书中对世界上最流行的7种正则表达式流派给出的翔实均衡的讲解,而感到受益颇多。我们把本书组织成一本经典实例(cookbook, 原意为菜谱) , 从而可以直接跳到你想要细细阅读的话题。如果从头到尾阅读了整本书,你就会成为一个正则表达式的世界级“大厨”。无论你是否是程序员,本书除了会教给你关于正则表达式所需知道的所有内容之外,还会讲解更多其他内容。如果你想要在文本编辑器、查找工具,或是任意含有带“正则表达式”标签的应用程序中使用正则表达式,那么你根本不需要任何编程经验就可以阅读本书。本书中的大多数例子都拥有完全基于一个或多个正则表达式的解决方案。如果你是程序员,那么第3章会讲解在源代码中实现正则表达式所需的所有信息。本章假设读者对所选择的编程语言的基本语言特性是熟悉的,但是并不假设你在源代码中曾经使用过任何的正则表达式。涉及的技术.NET、Java、JavaScript、PCRE、Perl、Python以及Ruby, 这些不只是一些用在封面上的热门词汇。它们是本书要讲到的7种正则表达式流派。我们会把这7种流派等同对待,还会特别小心地指出这些正则表达式流派中所能找到的所有不一致的地方。关于编程的一章(第*3章) 中包含使用如下语言的代码示例:C#、Java、JavaScript、PHP、Perl、Python、Ruby以及VB.NET。虽然这样做会让这一章看起来有些重复, 但是这样读者就可以很容易跳过那些不感兴趣的语言的讨论,而不会错过对于你所选择语言应当知道的任何内容。
在正则表达式中的省略号会被用来说明在使用该正则表达式之前必须“把这里的空白填好”。相应的文字解释中会告诉你在其中应该填人什么样的内容。CR、困和CR LECR、LF和CRLF放在黑框中用来表示在字符串中实际出现的换行字符, 而不是正则表达式中的字符转义序列(character escapes) , 例如 r、 n和 r n。要创建这些字符, 可以通过在应用程序的多行编辑面板中按回车键(Enter) , 或者也可以通过在源代码中使用多行字符常量, 比如在C#中的逐字字符串(verbatim strings) , 或是Python语言中的三引号字符串(triple-quoted strings) 。这个符号表示回车箭头, 它与键盘上的回车(Return或Enter) 键上的符号一样, 用来说明必须打断一行才能使之符合印刷页面的宽度。当你在源代码中键入这些代码的时候,不需要按回车键,而是应该把所有内容都键入同一行之中。代码示例的使用本书的目的就是要帮助读者完成手头的工作。一般来说,读者可以随意在程序和文档中使用本书中出现的代码。除非你打算再利用本书中大量的代码,否则并不需要联系我们以获得许可。销售或者发布O'Reilly图书中包含示例的CD-ROM则必须要获得许可。引用本书或者引用其中的示例代码来回答问题并不需要获得许可。在你的产品文档中利用本书中的大量代码示例则需要获得许可。如果读者在引用本书时提供出处,我们会很感激,虽然我们并不要求你一定这样做。提供出处的时候通常需要包括书名、作者、出版社和书号(ISBN) 。例如:“RegularExpressionsSteven Levi than.O'Reilly 2009,978-0-596-2068-7.”。如果你觉得对代码示例的使用可能会超出上面所给出的许可范围,或是属于合理使用的范围之外,那么请随时通过permissions@oreilly.com联系我们。