Vim 正则表达式:捕获字符之间单词的*第一个*实例

Vim Regex: Capture *first* instance of word between characters

我的组织有一种内部语言,语法如下:

cmo/create/mo1///tri
createpts/brick/xyz/2,2,2/0.,0.,0./1.,1.,1./1,1,1

我正在编写一个 Vim 语法文件,并希望捕获 第一个 由两个字符括起的单词实例(在本例中,/), 没有 捕获字符本身。

即,正则表达式将从上面的行中捕获,

create
brick

到目前为止我的解决方案是使用这个模式:

[,/=" "].\{-}[,/=" "]

但是从/this/and/this/and/this开始,它会捕获/this/and/this/and/this/.

如您所见,问题有两个方面:(i) 我当前的解决方案是贪婪的,并且 (ii) 也捕获 / 个字符,而我只想要这些字符所包含的单词.

谢谢!

一种可能的解决方案:

^[^\/]\+\/\zs[^\/]\+\ze\/
  • ^ 将搜索锚定到 BOL,
  • [^\/]\+一个或多个非斜线字符,尽可能多,
  • \/一个斜杠,
  • \zs从这里开始比赛,
  • [^\/]\+ 一个或多个非斜杠字符,尽可能多。