反向引用搜索替换为尾随数字

时间:2015-10-28 23:50:11

标签: search vim replace backreference

我正在使用vim查找一个四位数字并替换最后一位数字,但与使用println(Foo().alias.dynamicType) 值作为后引用的新学校sed不同,它使用${1}而我是努力追加以下数字。我需要这样做:

  • a = 1234 => A = 1235
  • b = 1374 => B = 1375

我想我需要\1 其中是零长度字符。 我试过s/\(=[0-9]\{3\}\)4/=\1<xxx>5/g但它没有使用反向引用。 有趣的是s/\(=[0-9]\{3\}\)4/=${1}5/g正确地做到了这一点,但实际上有15个后向引用组时有一个极端情况......

1 个答案:

答案 0 :(得分:4)

只能有9个子匹配。 \1\9\0这是整场比赛。您可以在:help s/\1:help /\1的帮助中看到此信息,其中只列出1到9.因此,对于尾随数字没有歧义。 \15始终是第一个子匹配,后跟一个5.如果你有超过9个,你也会收到错误。

如果你使用所有这些,你的正则表达式可能太复杂了。

如果你想在替换命令中进行添加,我会使用替换表达式。这是通过将\=作为替换的开头来完成的,并将其后面的内容视为vim表达式。

:s/=\zs\d\+/\=submatch(0) + 1/g

此功能的帮助页面为:help sub-replace-expression