反向引用在vim中捕获组

时间:2015-07-10 06:09:58

标签: regex vim matching backreference

在某些文字中,我需要找到一个字符串,该字符串可能是以下

之一
foo#foo%foo
foo#foo%bar
foo#bar%foo
foo#bar%bar
bar#foo%foo
bar#foo%bar
bar#bar%foo
bar#bar%bar

我可以像这样编写正则表达式匹配器

/\(foo\|bar\)#\(foo\|bar\)%\(foo\|bar\)

工作正常。

但我想避免在匹配器中重复捕获组。

如果我写的话

/\(foo\|bar\)#\1%\1

它只匹配我在开头提到的第一个和最后一个可能的字符串。

问:我可以参考之前的捕获组本身,而不是之前的匹配吗?

1 个答案:

答案 0 :(得分:1)

我完全不想创建和重用子模式并重用它们像@Amadan和@ lcd047 alluded to但是Vim不支持我所知道的这种行为。

作为替代方案,您可以在修改模式时使用<c-f>来打开command-line-window。在此窗口中,您可以使用常规的Vim命令编辑模式,例如dawct)等。完成后,您可以按<cr>并运行搜索/命令。

有一个很好的Vimcast插曲:Refining search patterns with the command-line window

如需更多帮助,请参阅:

:h command-line-window
:h q/
:h c_Ctrl-f