使用vim 7.2,本文:
foo foo 令牌 foo foo 反击 foo foo 令牌 foo 目标 foo foo countertoken foo
我希望匹配以'token'开头并以'target'结尾的每个字符串,不包含'countertoken'。
所以,在上面的例子中,我想匹配这个:
foo foo token foo foo countertoken foo foo token foo target foo foo countertoken foo
但不这个:
foo foo
令牌foo foo countertoken foo foo令牌foo目标 foo foo countertoken foo
(原因是,在实践中,我正在搜索长文件,我对'target'之前的最后一个'token'感兴趣。令牌有点像XML标签,但它不是XML ,所以XML工具没有帮助。我知道我可以使用\zs
所以光标落在'目标'上然后向后搜索'令牌',但肯定有一步解决方案!)
我希望这样的东西能起作用,但事实并非如此:
/token\(.*countertoken.*\)\@!*target
我感兴趣的有很多这样的事件,当然,我正在搜索的文件并不像'foo'那样充满常规。
vim中是否有单行正则表达式?
答案 0 :(得分:1)
如果您只对最后一次token
感兴趣,则无需关心countertoken
。
一种可能性是查找token
的最后一次出现并匹配所有内容直到下一个target
。
/.*\zs\(token\).\{-}\(target\)
说明:
.*\zs
- 匹配上次出现。\(token\)
- 匹配字符串“token”.\{-}
匹配非贪婪的\(target\)
- 匹配字符串“target”