2012-12-28 16 views
2

我試圖創建一個Vim的語法文件,我想匹配文本的以下位:Vim的正則表達式跳過定界符

@[one two three four] 

基本上,我想匹配onetwo作爲兩個獨立的匹配,我不在乎threefour(或其他任何東西)。我也不想在表達式的開頭加入@[分隔符。

我試圖與地區這樣做,就像這樣:

syn region langParamOne matchgroup=langListStart start=/@\[/ end=/\s\|\]/ 
syn region langParamTwo matchgroup=langListStart start=/@\[\S\+\s\+/ end=/\s\|\]/ 

不幸的是,這不僅顯得凌亂,但VIM將只匹配的地區之一,因爲一個包含了其他。

如何爲此語法設置一個匹配項,但不包括比賽中的起始@[

回答

1

如何:

syn region langParam matchgroup=langListStart start=/@\[/ end=/\]/ contains=langParamOne,langParamTwo 
syn match langParamOne /\(@\[\)\@<=\S\+/ contained 
syn match langParamTwo /\(@\[\S\+\s\)\@<=\S\+/ contained 
+0

啊,所以VIM的正則表達式*做*支持前瞻/向後看。猜猜我錯過了。非常感謝,它效果很好! –

+0

@JakeKing不僅如此,值得注意的是它支持*可變長度*後備(用於'langParamTwo')。即使在今天,許多正則表達式仍然不支持。 – Tomalak