如何使 vim syn 正则表达式捕获尾随 space 的单词?

how to make vim syn regex to capture word with trailing space?

我正在尝试制作一个 vim 正则表达式来突出显示此示例中的单词 house,但前提是后跟空格且句子以分号结尾。

herbert house mouse; bear care; house moose hat; // both instances of house highlighted
cow (house) banana goat; car bar; //house must NOT be highlighted
house beagle //house must NOT be highlighted

来自我的 VIM 语法文件:

syn match ngzRewLine '\w\+[^;]\{-};' contains=ngzRew
syn keyword ngzRew house contained

除了 (house) 被突出显示外,这很好用。我可以使用什么正则表达式来匹配尾随空格和非贪婪结尾分号的单词?

编辑

总而言之,ngzRew关键字组中的词在以下情况下应突出显示:

以下不应出现突出显示:

这里以

house为例,但ngzRew关键字组中还有其他关键字,行为应该相同。

你可以这样做(这可能不是很方便,但由于以下空格,我想不出更好的方法)

highlight MyGroup ctermbg=green guibg=green
syntax match MyGroup /\(house\|car\)\ze\(;\|\s.\{-};\)/

现在它也匹配 car

  • \ze匹配任意位置,并在此处设置匹配结束,
  • \s 空白字符,
  • .匹配任意单个字符,
  • \{-}匹配0个或多个前面的原子,越少越好,
  • \(\)大括号可以把一个模式做成一个原子,
  • \| 是模式中的 "or" 运算符。

@ryuichiro 给了我找到答案所需的一切,所以我把它归功于他。但允许无限数量关键字的完整解决方案如下:

syn match ngzRewLine /\w\+\ze\(;\|\s.\{-};\)/ contains=ngzRew contained
syn keyword ngzRew house contained
syn keyword ngzRew cheesecake contained
syn keyword ngzRew ...etc contained