gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:59:35 25 4
gpt4 key购买 nike

我最近在 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"

目前尚不清楚它是如何使用的以及用于什么目的。对它的作用和使用方式的一个很好的解释会很棒。

需要明确的是,这是 不是 & (replace with whole match) 用于替换,这是 \&在模式中使用。

用法示例:
/\c\v([^aeiou]&\a){4}

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

最佳答案

说明:
\&是到 \| ,and 运算符对 or 运算符的意义。因此,两个 concat 必须匹配,但只有最后一个会突出显示。

示例 1:

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

想象一下这个字符串:

foo foobar

现在, /foo将突出显示 foo在这两个词中。但有时你只想匹配 foofoobar .那么你必须使用 /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 个字母字符的字符串。

关于regex - Vim 正则表达式中的\& 模式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18309859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com