对Vim的正则表达式中的\感到很困惑

时间:2019-01-19 09:25:19

标签: regex vim

我一直在尝试在vim中进行简单替换,发现\?*+中不起作用,说(NFA regexp) Can't have a multi follow a multi,在vim中:

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

如果我删除\?可以使用,但是它的正则表达式最多匹配第二个here

但是使用常规正则表达式,它可以工作:https://regex101.com/r/iHdxxl/1

为什么在Vim中无法将\?*\+一起使用?

2 个答案:

答案 0 :(得分:3)

there所述,您不能在星号后的vim中添加?字符。 要使搜索变得不贪心,您需要使用.\{-}而不是.*

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

答案 1 :(得分:2)

另一种选择是使用负前瞻:

Rename Master

:%s/\v^((here)@!.)* here// 用于非常魔术,以避免在正则表达式中转义。