Regex Vim正则表达式替换
我认为这是一个非常简单的解决方案,但我一直试图找到一个答案,大约一个小时,似乎无法找到它 我正在尝试在Vim中执行查找/替换操作,该操作将替换一系列以Regex Vim正则表达式替换,regex,vim,Regex,Vim,我认为这是一个非常简单的解决方案,但我一直试图找到一个答案,大约一个小时,似乎无法找到它 我正在尝试在Vim中执行查找/替换操作,该操作将替换一系列以103开头的数字,后面是四位数到123,后面是相同的四位数,如下所示: 1033303->1233303 1033213->1233213 最接近我的是: %s/103\d\{4}/123\0/g 但是,这会导致整数与\0匹配,如下所示: 1033303->1231033303 非常感谢您的帮助非常接近 %s/103\(\d\{4}\)/123\
103
开头的数字,后面是四位数到123
,后面是相同的四位数,如下所示:
1033303
->1233303
1033213
->1233213
最接近我的是:
%s/103\d\{4}/123\0/g
但是,这会导致整数与\0
匹配,如下所示:
1033303
->1231033303
非常感谢您的帮助非常接近
%s/103\(\d\{4}\)/123\1/g
\(
和\)
之间的模式是一个子匹配,可由\1
、\2
等按出现顺序访问。请参阅:help\(
了解更多信息。使用捕获组:
%s/103\(\d\{4}\)/123\1/g
试试这个:
%s#103\(\d\{4}\)#123\1#g
现在,没有捕获组
:%s/103\ze\d\{4}/123/g
\ze
将在此处设置匹配的结束。这允许您匹配整个图案,但仅对其中的一部分进行替换
:h /\ze
:h /\zs
在操作系统被忽略后,.*after\ze会在每次操作后都执行此操作吗?是的,它会阻止在同一行上进行更多的匹配这在这里起作用:
:%s,103\ze.*123,g
更改分隔符(快速键入)并将所有后续字符与替换时将被忽略的*
匹配。注意在vim中链接正则表达式greediness很奇怪