zl程序教程

您现在的位置是:首页 >  后端

当前栏目

《正则表达式经典实例(第2版)》——导读

2023-09-11 14:17:36 时间
正则表达式在过去十多年间越来越普及。如今,所有常用的编程语言都会包含一个强大的正则表达式函数库,甚至在语言本身就内嵌了对于正则表达式的支持。许多开发人员都会利用这些正则表达式的功能,在应用程序中为用户提供使用正则表达式对其数据进行查找或者过滤的能力。正则表达式已经无处不在。

00661974acdd8cc52051f9bb5a0f396d6a0a52bf

**
前言
**
正则表达式在过去十多年间越来越普及。如今,所有常用的编程语言都会包含一个强大的正则表达式函数库,甚至在语言本身就内嵌了对于正则表达式的支持。许多开发人员都会利用这些正则表达式的功能,在应用程序中为用户提供使用正则表达式对其数据进行查找或者过滤的能力。正则表达式已经无处不在。

随着正则表达式的广泛采用,出现了许多相关的著作。其中大多数都很好地讲解了正则表达式的语法,并且还会提供一些例子以及参考实现。然而,我们还没有看到有任何一本书能够针对处理计算机和不同因特网应用上的文本所遇到的各种实际问题为读者提供基于正则表达式的解决方案。因此,本书作者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 RegexBuddy
1.3.2 RegexPal
1.3.3 RegexMagic
1.3.4 更多正则表达式在线测试工具
1.3.5 更多桌面正则表达式测试工具
1.3.6 grep
1.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 把匹配上下文插入到替代文本中


《正则表达式经典实例(第2版)》——2.22 把匹配上下文插入到替代文本中 上下文(context)这个术语,指的是正则表达式所应用于的目标文本。总共存在3种上下文:正则匹配之前的目标文本、正则匹配之后的目标文本以及整个目标文本。在匹配之前的文本有时候被称作左上下文(left context),而匹配之后的文本则相应地被称作右上下文(right context)。
《正则表达式经典实例(第2版)》——2.21 把部分的正则匹配添加到替代文本中 实例2.10讲解了在正则表达式中如何使用捕获分组来多次匹配相同的文本。在正则表达式中,每个捕获分组匹配到的文本在每次成功匹配之后都是可用的。你可以把部分或者所有捕获分组中的文本按照任意顺序甚至多次插入到替代文本中。
《正则表达式经典实例(第2版)》——2.20 在替代文本中添加正则匹配 把整个正则匹配重新插回到替代文本中,是在匹配文本之前、之后或者两边,甚至是在匹配文本的多个副本之间插入新文本的一种比较容易的方式。除Python之外,你都不必在正则表达式中添加任何捕获分组,就能够在替换中使用整个匹配结果。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。