从中:h E65
我们可以看到,Vim在替换命令中不允许超过9个捕获组。
例如,以下命令将起作用:
s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)/\9\8\7\6\5\4\3\2\1
但是,这个带有一个捕获组的捕获组将失败:
s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/\10\9\8\7\6\5\4\3\2\1
我的问题不是关于为什么失败(这是Vim的硬限制),而是关于为什么Vim根本没有这个限制?
另外,我知道具有超过9个捕获组的真实正则表达式可能很难阅读和维护,但我仍然很好奇。
2
也许不仅与Vim有关:stackoverflow.com/a/10993346/2558252
—
nobe4 2016年
@ nobe4:有趣!因此,也许创建这些工具的人们认为超过9个小组是无用的……
—
statox
我想这个限制来自vi,它继承了ed / sed的限制。几年前,我制作了补丁程序以支持多达99个团体,但其中并未包括在内
—
Christian Brabandt
@ChristianBrabandt一个更有用的补充是实现数字标记,例如
—
佐藤桂
sed
:s/.../.../3
将仅替换模式的第3次出现。这可能是我在Vim中最想念的功能。
支持命名捕获将是缓解此问题的另一种方法。话虽这么说,但我通常看到9个捕获组附近的任何地方都是人们不知道他们可以使用非捕获组-
—
jamessan
\%()
。