反向引用搜索替换为尾随数字
Backreference search replace with trailing numeral
我正在使用 vim 查找一个四位数并替换最后一位数字,但与使用 </code> 值作为反向引用的新学校 sed 不同,它使用 <code>
并且我正在努力添加以下数字。我需要做的:
- a=1234 => a=1235
- b=1374 => b=1375
我想我需要s/\(=[0-9]\{3\}\)4/=<xxx>5/g
其中 是一个零长度的字符。
我试过 s/\(=[0-9]\{3\}\)4/=5/g
但它没有使用反向引用。
有趣的是s/\(=[0-9]\{3\}\)4/=/g
做对了,但是有一个极端情况,实际上有 15 个反向引用组...
只能有 9 个子匹配项。 </code> 到 <code>
和 [=13=]
这是整场比赛。您可以在 :help s/
或 :help /
的帮助中看到这一点,其中仅列出 1 到 9。因此尾随数字没有歧义。 </code> 始终是第一个子匹配,后跟 5。如果超过 9,也会出现错误。</p>
<p>如果你使用所有这些,你的正则表达式可能太复杂了。</p>
<hr>
<p>如果您想在替换命令中执行加法,我会使用带表达式的替换。这是通过将 <code>\=
作为替换的开始并将其后的内容视为 vim 表达式来完成的。
:s/=\zs\d\+/\=submatch(0) + 1/g
此功能的帮助页面是 :help sub-replace-expression
我正在使用 vim 查找一个四位数并替换最后一位数字,但与使用 </code> 值作为反向引用的新学校 sed 不同,它使用 <code>
并且我正在努力添加以下数字。我需要做的:
- a=1234 => a=1235
- b=1374 => b=1375
我想我需要s/\(=[0-9]\{3\}\)4/=<xxx>5/g
其中 是一个零长度的字符。
我试过 s/\(=[0-9]\{3\}\)4/=5/g
但它没有使用反向引用。
有趣的是s/\(=[0-9]\{3\}\)4/=/g
做对了,但是有一个极端情况,实际上有 15 个反向引用组...
只能有 9 个子匹配项。 </code> 到 <code>
和 [=13=]
这是整场比赛。您可以在 :help s/
或 :help /
的帮助中看到这一点,其中仅列出 1 到 9。因此尾随数字没有歧义。 </code> 始终是第一个子匹配,后跟 5。如果超过 9,也会出现错误。</p>
<p>如果你使用所有这些,你的正则表达式可能太复杂了。</p>
<hr>
<p>如果您想在替换命令中执行加法,我会使用带表达式的替换。这是通过将 <code>\=
作为替换的开始并将其后的内容视为 vim 表达式来完成的。
:s/=\zs\d\+/\=submatch(0) + 1/g
此功能的帮助页面是 :help sub-replace-expression