Vim Regex替换

时间:2012-08-07 16:15:22

标签: regex vim

我认为这是一个非常简单的解决方案,但我一直试图找到大约一个小时的答案,似乎无法弄明白。

我正在尝试在Vim中进行查找/替换,以替换以103开头的一系列数字,然后是四位数到123,后跟相同的四位数字,如这样:

1033303 - > 1233303
1033213 - > 1233213

我最接近的是:

%s/103\d\{4}/123\0/g

然而,这导致整个号码与\0匹配,因此:

1033303 - > 1231033303

非常感谢您的帮助

4 个答案:

答案 0 :(得分:26)

你非常接近

%s/103\(\d\{4}\)/123\1/g

\(\)之间的模式是一个子匹配,可以按\1\2等按出现顺序访问。有关详细信息,请参阅:help \(

答案 1 :(得分:7)

现在没有捕获组!

:%s/103\ze\d\{4}/123/g

\ze将设置匹配结束。这允许您匹配整个模式,但只对其中的一部分进行替换。

:h /\ze
:h /\zs

答案 2 :(得分:3)

使用捕获组:

%s/103\(\d\{4}\)/123\1/g

答案 3 :(得分:1)

试试这个:

%s#103\(\d\{4}\)#123\1#g