我正在使用vim(版本7.3)。
在以下一行
1xAxBx4
其中A
和B
可以是任何字母数字字符,我想将xBx4
替换为foo
。我尝试了以下替换命令
:s/x.\{-}x4/foo/
并获取1foo
而不是我期望的1xAfoo
)。如果我使用此替换命令
1xAfoo
:s/x[^A]x4/foo/
但是这太具体了,如果我想要在多行上替换,那将无济于事,因为" A"在每一行上可能是一个不同的角色。
为什么\.{-}
出现意外行为?或者这正是人们所期望的,但我只是误解了语法?
答案 0 :(得分:1)
虽然您已经正确使用了非贪婪 \{-}
量词,但由于之前没有消费,它仍然会在第一个{{1然后,尽可能少地匹配。因为这有效,所以没有回溯。
现在,您需要在表达式之前添加一个贪婪的匹配,但不要使用这些字符。这可以通过x
实现,以便仅在之后开始匹配:
\zs
答案 1 :(得分:0)
这不是"非贪婪"
的用例 x.\{-}x4
将有意义,例如您想要替换:
xAAAx4BBBx4CCCx4 -> ######BBBx4CCCx4
如果不使用\{-}
,结果将为######
如果知道x
和x4
之间只有一个字符,您只需使用x.x4
,或者如果您想避免选择空格,请使用x\Sx4