在某些文字中,我需要找到一个字符串,该字符串可能是以下
之一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
它只匹配我在开头提到的第一个和最后一个可能的字符串。
问:我可以参考之前的捕获组本身,而不是之前的匹配吗?答案 0 :(得分:1)
我完全不想创建和重用子模式并重用它们像@Amadan和@ lcd047 alluded to但是Vim不支持我所知道的这种行为。
作为替代方案,您可以在修改模式时使用<c-f>
来打开command-line-window
。在此窗口中,您可以使用常规的Vim命令编辑模式,例如daw
,ct)
等。完成后,您可以按<cr>
并运行搜索/命令。
有一个很好的Vimcast插曲:Refining search patterns with the command-line window。
如需更多帮助,请参阅:
:h command-line-window
:h q/
:h c_Ctrl-f