正则表达式必知必会(修订版)
上QQ阅读APP看书,第一时间看更新

1.2 如何使用正则表达式

如果认真思考一下那些问题场景,就会发现它们不外乎两种情况:一种是查找特定的信息(搜索),另一种是查找并编辑特定的信息(替换)。事实上,从根本上来讲,这正是正则表达式的两种基本用途:搜索和替换。给定一个正则表达式,它要么匹配一些文本(进行一次搜索),要么匹配并替换一些文本(进行一次替换)。

1.2.1 用正则表达式进行搜索

正则表达式的主要用途之一是搜索变化多端的文本,比如刚才描述的搜索单词car的场景:你要把carCARCarCaR都找出来,但这只是整个问题中比较简单的一部分(有许多搜索工具都可以完成不区分字母大小写的搜索)。比较困难的部分是确保scarcarryincarcerate之类的单词不会被匹配到。一些比较高级的编辑器提供了“Match Only Whole Word(仅匹配整个单词)”选项,但还有许多编辑器并不具备这一功能,而你往往无法在正在编辑的文档里做出这种调整。使用正则表达式而不是文本car进行搜索就可以解决这个问题。

提示 想知道如何解决这个问题吗?你其实已经见过答案了,它就是我们刚才给出的示例语句:\b[Cc][Aa][Rr]\b

请注意,“相等”(equality)测试(比如说,用户给出的电子邮件地址是否匹配这个正则表达式)本质上也是一种搜索操作,这种搜索操作会对用户所提供的整个字符串进行搜索以寻找一个匹配。与此相对的是子串搜索,这是搜索的惯常含义。

1.2.2 用正则表达式进行替换

正则表达式搜索的威力极其强大,非常实用,而且比较容易学习和掌握。本书的许多章节和示例都与“匹配”有关。不过,正则表达式的真正威力体现在替换操作方面,比如我们刚才所描述的把URL地址字符串替换为可点击URL地址的场景:这需要先把相关文本里的URL地址字符串找出来(比如说,通过搜索以http://https://开头并以句号、逗号或空白字符结尾的字符串),再把找到的URL地址字符串替换为HTML的<a href=...> ... </a>元素,如下所示:

http://www.forta.com/

替换结果:

<a href="http://www.forta.com">http://www.forta.com/</a>

也许匹配到的文本只是一个地址(例如:www.forta.com),而非完全限定的URL(fully qualified URL),需要将其转换成:

<a href="http://www.forta.com">http://www.forta.com/</a>

绝大多数应用程序的“Search and Replace(搜索和替换)”选项都可以实现这种替换操作,但使用正则表达式来完成这个任务将简单得让人难以置信。