首页 > 解决方案 > 对 vim 正则表达式中的 `\?` 感到非常困惑

问题描述

我一直在尝试在 vim 中进行简单的替换,并发现在 vim 中的\?vim 不能与*or一起使用+,也就是说(NFA regexp) Can't have a multi follow a multi,在 vim 中:

i want it to stop here, not here
~
~
~
[NORMAL] ...
:%s/^\(.*\?\)here//

如果我删除\?它可以工作,但它的正则表达式最多匹配 2nd here

但是使用普通的正则表达式它可以工作:https ://regex101.com/r/iHdxxl/1

为什么不能与 vim 一起使用\?*\+vim 中使用?

标签: regexvim

解决方案


那里所述,您不能?在 asterix 之后在 vim 中添加字符。要使搜索不贪婪,您需要使用.\{-}而不是.*

:%s/\(.\{-}\)here//

推荐阅读