基本信息
编辑推荐
一部答疑释惑的正则表达式指引之书
常用文本处理以及语言开发的技术开发人员必读!
内容简介
计算机书籍
《正则指引》针对作者在开发中遇到的实际问题,以及其他开发人员咨询的问题,总结出一套使用正则表达式解题的办法,并通过具体的例子指导读者拆解、分析问题。全书分为三大部分:第一部分主要讲解正则表达式的基础知识,涵盖了常见正则表达式中的各种功能和结构;第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍的各种知识落实到6种常用语言.NET、Java、JavaScript、PHP、Python、Ruby中,不但详细介绍了语言中正则表达式的用法,更点明了版本之间的细微差异,既可以作为专门学习的教材,也可以作为有用的参考手册。
《正则指引》适合经常需要进行文本处理(比如日志分析或网络运维)的技术人员、熟悉常用开发语言的程序员,以及已经对正则表达式有一定了解的读者阅读。
作译者
已经翻译出版《精通正则表达式(第3版)》和《技术领导之路》,审阅《软件架构师应该知道的97件事》和《REST in Practice中文版》。
目录
第一部分
第1章 字符组 2
1.1 普通字符组 2
1.2 关于Python的基础知识 4
1.3 普通字符组(续) 6
1.4 元字符与转义 8
1.5 排除型字符组 10
1.6 字符组简记法 12
1.7 字符组运算 14
1.8 POSIX字符组 15
第2章 量词 17
2.1 一般形式 17
2.2 常用量词 18
2.3 数据提取 21
2.4 点号 23
2.5 滥用点号的问题 23
2.6 忽略优先量词 26
2.7 转义 31
第3章 括号 33
前言
没错,正则表达式并不“总要用到”,但到了需要的场合用不上,往往产生“一分钱难倒英雄汉”的尴尬。经常需要处理文本的程序员自然会知道正则表达式的价值,其他的程序员如果不会正则表达式,即便开发的领域与文本处理没什么关系,也难免“躺着中枪”的命运——前几天我遇到一个问题,将一行长长的地址拆分成多行,负责这部分的程序员的日常工作只是制作PDF而已,拆分地址是很“边缘”的功能,但不会正则表达式就无法准确折行(一般需要在标点符号出现的地方折行,而不能只在空白字符处折行,但是不同语言中的标点符号各有不同),结果一筹莫展;相反,如果了解正则表达式,就可以很容易地处理各种语言中的标点字符。
以我的开发经验来看,专门花点时间掌握正则表达式,确实是非常有必要的。目前可以见到的关于正则表达式的书籍和资料有不少,但又各有不足。
在互联网上,流传着一些编程语言的正则文档和《30分钟教会你正则表达式》之类的帖子。这类资料的好处是简单直接,查到了,如果有现成的例子,而且适用于自己的语言,则可以直接拿来用;然而,其坏处也是简单直接,因为缺乏背后原理的讲解,如果找不到现成的例子,或者找不到能在自己所使用语言中行得通的例子(需知道,同样的正则表达式并不能直接套用到不同的语言中),则束手无策。
在正式的出版领域,已经有《精通正则表达式》、《正则表达式必知必会》之类的书籍出版,尤其是前者,堪称关于正则表达式的经典著作,如果想认真学习正则表达式,这类书籍是必须阅读的。但这类书籍也有一个弱点,即都是由英文版本翻译而来的,更多地侧重英文文本的处理,身为中文世界的开发人员,我们经常需要处理中文文本——对于处理英文之外的字符,正则表达式已经提供了足够丰富的功能,但如何用对、用好这些功能,资料却很匮乏。
我经常需要给人讲解正则表达式的相关知识,时常惋惜的是,开发人员为这些问题所困扰;正因为如此,本书的写作动机便是着力弥补现有资料的缺陷。
相对于正则文档和速成教学帖子,本书深入讲解了匹配背后的原理,往往会举一反三,告诉读者,这里为何这样写,如果改成其他形式,会造成什么结构;并且,集中讲解和比较了多种语言中正则表达式用法的异同,方便读者把现成的正则表达式“移植”到自己的工作环境中。
相对于《精通正则表达式》等正式的书籍,本书辟出专门的内容讲解语言和编码,告诉读者如何设定编码,如何正确处理中文等字符。另外,本书还涵盖了.NET、Java、JavaScript、PHP、Python、Ruby 六种常用语言,对每种语言给出专门章节,不但详细介绍了语言中正则表达式的用法,更点明了版本之间的细微差异,不但可以作为专门学习的教材,还可以成为有用的参考手册。
本书结构
本书可以分为三大部分。
第一部分主要讲解正则表达式的基础知识,覆盖常见正则表达式中的各种功能和结构。看完前面3章,就可以基本弄明白现在流行的各种正则表达式;尤其是如果你之前有一些经验,会觉得阅读起来并不困难。但是我也希望读者不要忽略其他的内容,断言和匹配模式现在已经是正则表达式的“标准配备”了,而且确实可以派上大用场,所以第4章和第5章的内容,即便不是很熟悉,阅读起来可能有一些麻烦,也不应该忽略。最后的第6章,则厘清了正则表达式在使用中的若干疑惑,了解它们,你就可以相对自由地在正则表达式的世界里行走了。
第二部分主要讲解关于正则表达式的更深入的知识,这一部分用3章的内容,详细探讨了编码问题、匹配原理、解题思路。这部分内容更抽象,需要多花一点时间来阅读和理解,但是它们确实可以帮你在正则表达式的世界里登堂入室,脱离“术”的层面,掌握万变不离其宗的“道”。
第三部分的作用是接地气,将之前介绍的各种知识落实到六种常用语言.NET、Java、JavaScript、PHP、Python、Ruby中来。每一章的开头有正则功能列表,其中的功能都对应着前面部分的讲解,这些功能的具体应用实例,以及不同版本之间的差异,则在章节中详细讲解,每一章的最后还给出了常见任务的示例代码,方便日后查询。在最后,第16章简要介绍了正则表达式在Linux下常用工具vi、grep、awk、sed中的使用,并通过一个实际的例子将这几种工具串起来,对比说明了它们适合解决的问题。
在本书的最后提供了用作参考的3个附录。
附录A是正则表达式的常用功能在不同语言中的比对,希望能给需要在多种语言中使用正则表达式或者移植正则表达式的读者提供一份有用的参考;附录B给出了若干常见的正则表达式,比如匹配邮政编码、身份证号、手机号、QQ号、电子邮件地址等,希望能成为常见问题的“速查手册”;附录C列出了常用正则表达式的工具和资源,方便大家调试自己的正则表达式,以及继续深入学习。
本书读者
本书适合以下几类读者。
经常需要进行文本处理(比如日志分析或网络运维)的技术人员。这些读者或许已经熟悉了正则表达式的基本用法,但面对日益复杂化和海量化的数据,阅读本书可以帮助你更准确、更高效地处理文本,提升自己工作的价值。
熟悉常用开发语言的程序员。虽然这些读者不需要专职进行文本处理,但源代码和许多数据其实也是文本,如果不会正则表达式,在偶然遇到处理源代码或文本数据的任务时,往往会产生躺着中枪的无力感。本书第三部分可以帮你迅速找到有关的例子,并落实在自己的编程语言中。当然前两部分也非常有必要,因为它们可以帮你夯实基础。
对正则表达式已经有一定了解的读者。这些读者虽然能用正则表达式解决常见的任务,但未必了解正则表达式的编码问题、匹配原理、解题思路,仔细阅读本书的第二部分,可以深化完善对正则表达式的理解;而第三部分详细比较了使用正则表达式时各种语言,以及同一种语言中各种版本的差异。所有这一切,应该可以让你对正则表达式的掌握更上一层楼。
媒体评论
我相信只有掌握并熟练运用它才有可能成为一个高效率的工程师。期待每个人手边都有一本正则表达式的参考书,当然,最好就是你现在看到的这本。
就在写这句话的几分钟前,我又从这本书中学到了一个有用的技巧。
冯大辉
配合恰当的案例,大量的反问,使读者自问、思考,扣人心扉,比较有代入感,加上配图,很容易让读者全面认识正则表达式。在原理讲解的章节,对比两种理论模型的区别,顺其自然地引入NFA引擎的关键要素——回溯,使读者从匹配原理上了解回溯,写出高效严谨的正则表达式。
陈驰 http://www.cnxct.com/
本书由浅入深的讲述了正则表达式,在正则的应用和调优方面有非常详细的介绍,特别在正则表达式处理中文方面有独到的阐述,对于需要经常处理中文的国内技术人员来说,无疑是非常值得拥有的一本手册。
贺钧 http://www.freefcw.com
正则表达式是程序员的必备知识。如果您还没有使用过这个强大的工具,或者学习正则表达式总不得要领,确实可以读读《正则指引》。
何源 http://www.cppblog.com/lambdacpp
这是一本通俗版的“精通正则表达式”。高手很难挑出毛病,一般程序员会受益匪浅,普通用户一步步读下去也能登堂入室。
张东亮 http://iregex.org
余晟在之前翻译业内名著的基础上,结合中文环境和自己的丰富经验,再接再厉推出自己的原创著作,实在是我等码农的一大幸事。
陈钢 http://gossipcoder.com