vim中的以下问题:
我想在不同的匹配组中捕获子模式的每个匹配。一个例子:对于该行:
#abcONE# #abcTWO#
和搜索模式
\(#abc...#\)*
我想同时获得这两个群体
1: #abcONE# 2: #abcTWO#
不幸的是,我只获得了一组,其中包含最后识别的子模式,即
#abcTWO#
你知道解决办法吗?
vim中的以下问题:
我想在不同的匹配组中捕获子模式的每个匹配。一个例子:对于该行:
#abcONE# #abcTWO#
和搜索模式
\(#abc...#\)*
我想同时获得这两个群体
1: #abcONE# 2: #abcTWO#
不幸的是,我只获得了一组,其中包含最后识别的子模式,即
#abcTWO#
你知道解决办法吗?
由于您只能通过数字\1
(而不是范围或通配符)直接引用捕获的组,因此您必须事先知道使用的组数。
那么为什么不将多项扩展*
成不同的组,所有匹配可选\?
:
\(#abc...#\)\?\(#abc...#\)\?\(#abc...#\)\?\(#abc...#\)\?
你会如何处理匹配的模式?替换?
/#abc...# will select both
:%s/\v(#abc...#)/foo/g will replace both
你的\(#abc...#\)*
行不通。因为你的两个“#abc ...#”之间有一个空格