gpt4 book ai didi

regex - 如何在一行中找到第二个和第四个搜索项?

转载 作者:行者123 更新时间:2023-12-01 09:33:46 30 4
gpt4 key购买 nike

这是我的文字:

my text my text my text my text my text
my text my text my text my text my text
|2| |4|

我正在尝试匹配所有行中的第 2 项和第 4 项在这种情况下 my

我确信下面的代码可以工作,但无论我如何更改它都不起作用。

/^\(.\{-}\zs\(my\)\)\{2}\|^\(.\{-}\zs\(my\)\)\{4}

谁能帮我找出代码中的错误?我怎样才能匹配这个项目?

最佳答案

测试这个模式,它只突出了第二个匹配,而不是第四个。交换正则表达式中的 2 和 4 会产生相反的效果。似乎后半部分被忽略了。

将后半部分替换为 text 确实如您所想 - 突出显示第二个 my 和出现的 text。然而,这并不是重复使用文本来匹配。

根据vim手册,

A pattern is one or more branches, separated by "\|". It matches anything that matches one of the branches. Example: "foo\|beep" matches "foo" and matches "beep". If more than one branch matches, the first one is used.

似乎一旦一行的开头与正则表达式匹配,它就会被使用并且不可用于进一步匹配。

我能想到的最好办法是将第 2、4、6 等匹配项与 /^\(.\{-}\zs\(my\)\)\{2}\| 匹配\(.\{-}\zsmy\)\{2} - 从下半部分开始删除 ^,将 4 更改为 2 这样我们就可以在匹配之后进行匹配已经使用行首的前半部分匹配。我找不到避免匹配第 6 个和后续匹配项的方法 - 如果我们使用 .*$ 吃掉该行的其余部分,我们必须放一个 \ze 在它之前以避免突出显示该行的其余部分,但看起来 vim 跳回到 \ze 继续寻找匹配项的位置。

您想要执行的操作可能需要在匹配之间保存太多上下文和状态。

关于regex - 如何在一行中找到第二个和第四个搜索项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19068227/

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