Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Vim正则表达式替换_Regex_Vim - Fatal编程技术网

Regex 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\

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

我正在尝试在Vim中执行查找/替换操作,该操作将替换一系列以
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很奇怪