随着正则表达式的广泛采用,出现了许多相关的著作。其中大多数都很好地讲解了正则表达式的语法,并且还会提供一些例子以及参考实现。然而,我们还没有看到有任何一本书能够针对处理计算机和不同因特网应用上的文本所遇到的各种实际问题为读者提供基于正则表达式的解决方案。因此,本书作者Steve和Jan决定写一本书来满足这种需求。
我们特别希望能够展现给读者的是:如何使用正则表达式来解决那些正则表达式经验有限的人认为无法解决的问题,或者软件纯粹主义者认为不能用正则表达式来解决的问题。因为如今正则表达式已无处不在,所以它们通常可以作为便利的工具被最终用户直接使用,而不需要程序员团队的参与。即使是对程序员来说,常常也可以在信息检索和修改的任务中采用一些正则表达式来节省大量时间,因为这些功能如果使用过程式代码来实现,可能会需要几小时甚至几天的时间,也可能会由于需要采用第三方的函数库,而不得不经过事先审查和管理人员的审批。与IT业界流行的东西一样,正则表达式也拥有许多种不同的实现,以及不同程度的兼容性。这就出现了许多不同的正则表达式流派(flavor),它们在处理一个特定正则表达式的时候并不总是拥有完全一样的表现,有时候甚至会无法正常工作。
在许多书中的确也提到了目前存在的不同流派,并且指出了其中的一些区别。但是,它们通常会选择在不同地方略掉一些流派—特别是当某种流派缺少特定功能的时候,而不是为之提供替代解决方案或者变通方法。而当需要在不同的应用程序或编程语言中使用不一样的正则表达式流派的时候,就会令人感到沮丧。
在文字方面,也常常可以看到一些不严格的表达,例如“所有人现在都在使用Perl风格的正则表达式”,但是这种说法轻视了大范围的不兼容。即使都是“Perl风格”的函数库也有显著的区别,而与此同时Perl也在持续不断地发展。过度简单化的印象可能会导致程序员浪费半小时的时间来运行调试器却得不到任何结果,而不是去认真检查他们的正则表达式的实现细节。甚至当他们发现所依赖的一些功能不存在的时候,都不知道该如何找到变通方法。NET、Java、JavaScript、PCRE、Perl、Python以及Ruby,这些不只是一些用在封面上的热门词汇,它们是本书要讲到的7种正则表达式流派。我们把这7种流派等同对待,同时还会特别仔细地指出这些正则表达式流派中我们所能找到的所有不一致的地方。
关于编程的一章(第3章)中包含如下语言的代码示例:C#、Java、JavaScript、PHP、Perl、Python、Ruby以及VB.NET。同样,每一个实例都有这8种语言的解决方案和解释。虽然这样做会让这一章看起来有些啰唆,但是读者可以很轻松地跳过那些不感兴趣的语言的讨论,而不会错过所选用语言中应当知道的任何内容。
**[第 1 章 正则表达式简介1.1 正则表达式的定义](https://yq.aliyun.com/articles/93203)**1.1.1 众多正则表达式流派1.1.2 本书涵盖的正则流派1.2 使用正则表达式进行查找和替换1.3 正则表达式工具1.3.1 RegexBuddy1.3.2 RegexPal1.3.3 RegexMagic1.3.4 更多正则表达式在线测试工具1.3.5 更多桌面正则表达式测试工具1.3.6 grep1.3.7 常见的文本编辑器**[第 2 章 正则表达式的基本技能2.1 匹配字面文本](https://yq.aliyun.com/articles/93267)**2.2 匹配不可打印字符2.3 匹配多个字符之一2.4 匹配任意字符2.5 匹配文本行起始和或文本行结尾2.6 匹配完整单词2.7 Unicode码位、类别、区块和字母表2.8 匹配多个选择分支之一2.9 分组和捕获匹配中的子串2.10 再次匹配先前匹配的文本2.11 捕获和命名匹配子串2.12 把正则表达式的一部分重复多次2.13 选择最小或最大重复次数2.14 消除不必要的回溯2.15 避免失控重复2.16 测试一个匹配,但不添加到整体匹配中2.17 根据条件匹配两者之一2.18 向正则表达式中添加注释2.19 在替代文本中添加字面文本2.20 在替代文本中添加正则匹配2.21 把部分的正则匹配添加到替代文本中2.22 把匹配上下文插入到替代文本中
相关资源:正则表达式经典实例.pdf