【问题标题】:Vim regex skip delimitersVim 正则表达式跳过分隔符
【发布时间】:2012-12-28 07:08:12
【问题描述】:

我正在尝试创建一个 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 只会匹配其中一个区域,因为一个包含另一个。

如何设置此语法的匹配项,但不包括在匹配项中的起始 @[

【问题讨论】:

    标签: regex vim vim-syntax-highlighting


    【解决方案1】:

    这个怎么样:

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

    【讨论】:

    • 啊,所以 vim 正则表达式 do 支持look-ahead/look-behind。我想我错过了。非常感谢,效果很好!
    • @JakeKing 不仅如此 - 值得注意的是,它支持 可变长度 后视(在 langParamTwo 中使用)。即使在今天,许多正则表达式风格仍然不支持这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多