1.2 如何使用正则表达式
如果认真思考一下那些问题场景,你就会发现它们不外乎两种情况:一种是查找特定的信息(搜索),另一种是查找并编辑特定的信息(替换)。事实上,从根本上来讲,那正是正则表达式的两种基本用途:搜索和替换。给定一个正则表达式,它要么匹配一些文本(进行一次搜索),要么匹配并替换一些文本(进行一次替换)。
1.2.1 用正则表达式进行搜索
正则表达式的主要用途之一是搜索变化多端的文本,比如刚才描述的搜索单词car的场景:你要把car、CAR、Car,或CaR都找出来,但这只是整个问题比较简单的一部分(有许多搜索工具都可以完成不区分字母大小写的搜索)。比较困难的部分是确保scar、carry和incarcerate之类的单词不会被匹配到。一些比较高级的编辑器提供了“Match Only Whole Word(仅匹配整个单词)”选项,但还有许多编辑器并不具备这一功能,而你往往无法在你正在编辑的文档里做出这种调整。使用正则表达式而不是纯文本car进行搜索就可以解决这个问题。
提示 想知道如何解决这个问题吗?你们其实已经见过答案了——它就是我们刚才给出的示例语句:\b[Cc][Aa][Rr]\b
请注意,“等于”比较(比如说,用户给出的电子邮件地址是否匹配这个正则表达式?)本质上也是一种搜索操作,这种搜索操作会对用户所提供的整个字符串进行搜索以寻找一个匹配。与此相对的是子字符串搜索,子字符串搜索是“搜索”这个词的普通含义。
1.2.2 用正则表达式进行替换
正则表达式搜索的威力非常强大,非常有用,而且比较容易学习和掌握。本书的许多章节和示例都与“匹配”有关。不过,正则表达式的真正威力体现在替换操作方面,比如我们刚才所描述的需要把URL地址字符串替换为可点击URL地址的场景:这需要先把相关文本里的URL地址字符串找出来(比如说,通过搜索以http://或https://开头、以句号、逗号或空白字符结尾的字符串),再把找到的URL地址字符串替换为HTML语言的“<A HREF=…> … </A>”元素,如下所示:
替换结果:
绝大多数应用程序的“Search and Replace”(搜索和替换)选项都可以完成这种替换操作,但使用一个正则表达式来完成这个任务将简单得让人难以置信。