Что такое \& pattern в Vim Regex

Недавно я встретил спецификатор ветки в встроенных редакторах Vim. Раздел справки 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"

Не понятно, как он используется и для чего он используется. Хорошее объяснение того, что он делает и как оно будет использоваться, было бы здорово.

Чтобы быть понятным, это не & (заменить всем целым), используемое в подстановке, это \&, используемый в шаблоне.

Пример использования:

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

Используется для поиска 4 последовательных согласных (взято из подсказок vim).

Ответ 1

Объяснение:

\& соответствует \|, что и оператор operator или оператор. Таким образом, оба контата должны совпадать, но будут выделены только последние.

Пример 1:

(Следующие тесты предполагают :setlocal hlsearch.)

Представьте эту строку:

foo foobar

Теперь /foo выделит foo в обоих словах. Но иногда вы просто хотите сопоставить foo в foobar. Затем вы должны использовать /foobar\&foo.

Как все работает. Часто ли используется? Я не видел его больше, чем несколько раз. Большинство людей, вероятно, будут использовать атомы нулевой ширины в таких простых случаях. Например. то же, что и в этом примере, можно сделать с помощью /foo\zebar.

Пример 2:

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

\c - игнорировать регистр

\v - "очень волшебный" (- > вам в этом случае не нужно избегать &)

(){4} - повторить один и тот же рисунок 4 раза

[^aeiou] - исключить эти символы

\a - буквенный символ

Таким образом, это довольно запутанное regexp будет соответствовать xxxx, xxxx, wXyZ или wXyZ, но не AAAA или xxx1. Помещая это простыми словами: сопоставьте любую строку из 4 буквенных символов, которая не содержит "a", "e", "i", "o" или "u".