Linux中国
正则表达式的分组和数字
大约一周前,我在编辑一个程序时想要更改一些变量名。我之前认为这将是一个简单的正则表达式查找/替换。只是这没有我想象的那么简单。
变量名为 a10
、v10
和 x10
,我想分别将它们改为 a30
、v30
和 x30
。我想到使用 BBEdit 的查找窗口并输入:
![Mistaken BBEdit replacement pattern](/data/attachment/album/201903/06/202409pe33ejxexwl7emj3.png "Mistaken BBEdit replacement pattern")
我不能简单地 30
替换为 10
,因为代码中有一些与变量无关的数字 10
。我认为我很聪明,所以我不想写三个非正则表达式替换,a10
、v10
和 x10
,每个一个。但是我却没有注意到替换模式中的蓝色。如果我这样做了,我会看到 BBEdit 将我的替换模式解释为“匹配组 13,后面跟着 0
,而不是”匹配组 1,后面跟着 30
,后者是我想要的。由于匹配组 13 是空白的,因此所有变量名都会被替换为 0
。
你看,BBEdit 可以在搜索模式中匹配多达 99 个分组,严格来说,我们应该在替换模式中引用它们时使用两位数字。但在大多数情况下,我们可以使用 1
到 9
而不是