Vim的正则表达式中的\&模式是什么?

Tom*_*ann 11 regex vim

我最近遇到了Vim regex builtins中的分支说明符.Vim的帮助部分\&包含:

A branch is one or more concats, separated by "\&".  It matches the last
concat, but only if all the preceding concats also match at the same
position.  Examples:
      "foobeep\&..." matches "foo" in "foobeep".
      ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob"
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚它是如何使用的以及它的用途.对它的作用以及如何使用它的一个很好的解释将是伟大的.

要清楚这不是&替换中使用的(替换为整个匹配),这是\&在模式中使用的.

用法示例:

/\c\v([^aeiou]&\a){4}
Run Code Online (Sandbox Code Playgroud)

用于搜索连续4个辅音(取自vim提示).

mhi*_*inz 14

说明:

\&\|什么的运营商的运营商.因此,两个concats必须匹配,但只有最后一个将被突出显示.

例1:

(以下测试假设:setlocal hlsearch.)

想象一下这个字符串:

foo foobar
Run Code Online (Sandbox Code Playgroud)

现在,/foofoo在两个词中突出显示.但有时你只想匹配fooin foobar.然后你必须使用/foobar\&foo.

无论如何它就是这样的.经常使用吗?到目前为止,我还没有看过几次.在如此简单的情况下,大多数人可能会使用零宽度原子.例如,与此示例相同,可以通过/foo\zebar.

例2:

/\c\v([^aeiou]&\a){4}.

\c - 忽略大小写

\v- "非常神奇"( - > &在这种情况下你不必逃避)

(){4} - 重复相同的模式4次

[^aeiou] - 排除这些字符

\a - 字母字符

因此,这一点,相当混乱,正则表达式将匹配xxxx,XXXX,wXyZWxYz而不是AAAAxxx1.用简单的术语表示:匹配任何不包含'a','e','i','o'或'u'的4个字母字符串.