gpt4 book ai didi

regex - vim 模式匹配两个标记,中间没有另一个给定的标记

转载 作者:行者123 更新时间:2023-12-04 08:52:50 26 4
gpt4 key购买 nike

使用 vim 7.2,对于此文本:

foo foo token foo foo countertoken foo foo token foo target foo foo countertoken foo



我想匹配每个以“token”开头并以“target”结尾的字符串,其中不包含“countertoken”。

所以,在上面的例子中,我想匹配这个:

foo foo token foo foo countertoken foo foo token foo target foo foo countertoken foo



但不是这个:

foo foo token foo foo countertoken foo foo token foo target foo foo countertoken foo



(这样做的原因是,在实践中,我正在搜索长文件,我对“目标”之前的最后一个“ token ”感兴趣。 token 有点像 XML 标签,但它不是 XML,所以 XML工具没有帮助。我知道我可以使用 \zs 所以光标落在“目标”上,然后向后搜索“ token ”,但肯定有一个一步解决方案!)

我希望这样的事情会起作用,但它没有:
/token\(.*countertoken.*\)\@!*target

有很多这样的事件我很感兴趣,当然,我正在搜索的文件并没有像“foo”那样有规律。

在 vim 中是否有单行正则表达式?

最佳答案

如果您只对最后的 token 感兴趣,您不必关心 countertoken .
一种可能性是查找 token 的最后一次出现。并匹配所有内容直到下一个 target .

/.*\zs\(token\).\{-}\(target\)

解释:
  • .*\zs - 匹配最后一次出现。
  • \(token\) - 匹配字符串“ token ”
  • .\{-}匹配非贪婪
  • \(target\) - 匹配字符串“目标”
  • 关于regex - vim 模式匹配两个标记,中间没有另一个给定的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13871710/

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