本节书摘来自异步社区《正则表达式经典实例(第2版)》一书中的第1章,第1.2节,作者: 【美】Jan Goyvaerts , Steven Levithan著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.2 使用正则表达式进行查找和替换
查找和替换(search-and-replace)对正则表达式来说是一个常见的任务。查找和替换的功能会接受一个目标字符串、一个正则表达式和一个替代字符串作为输入。它的输出则是把目标字符串中所有与正则表达式相匹配的字符串都替换为“替代文本”。
虽然替代文本(replacement text)并不是一个正则表达式,读者也可以使用某些特殊的语法构造动态的替代文本。所有的流派都允许把正则表达式或者某个捕获分组匹配到的文本,重新添加到替代字符串中。实例2.20和实例2.21会对此加以讲解。有些流派还会支持把匹配的上下文添加到替代文本中,这会在实例2.22中讲解。在第3章中,实例3.16将教你如何在代码中为每个匹配都生成不同的替代文本。
众多替代文本流派
由于不同正则表达式软件开发人员的想法各异,所以出现了非常多的正则表达式流派,每种流派都拥有不同的语法和特性集。而这对于替代文本来说也是一样的。事实上,替代文本拥有比正则表达式更多的流派。构造一个正则表达式引擎是非常困难的。大多数程序员都倾向于复用某个已有的引擎,因为在已有的正则表达式引擎上绑定查找和替换的功能是相当容易的。这样做造成的结果是,如果正则表达式库没有内置查找和替换功能,它们之上就会存在许多替代文本的流派。
幸运的是,除了PCRE,本书中所有的正则表达式流派都拥有相对应的替代文本流派。PCRE中的这个问题却使得使用基于其流派正则程序的程序员感到无所适从。开源PCRE库中并不包含任何替换功能。结果是,所有基于PCRE的应用程序和编程语言都需要提供它们自己的查找和替换功能。大多数程序员都会试图去复制已有的语法,但是从来不会按照完全相同的方式去做。