在 vim 中,我想使用正则表达式突出显示以字母结尾的每一行,该字母前面没有//
noor :
。我尝试了以下
syn match systemverilogNoSemi "\(.*\(//\|:\).*\)\@!\&.*[a-zA-Z0-9_]$" oneline
这对注释非常有效,但不适用于包含冒号的行。知道为什么吗?
在 vim 中,我想使用正则表达式突出显示以字母结尾的每一行,该字母前面没有//
noor :
。我尝试了以下
syn match systemverilogNoSemi "\(.*\(//\|:\).*\)\@!\&.*[a-zA-Z0-9_]$" oneline
这对注释非常有效,但不适用于包含冒号的行。知道为什么吗?
因为有了这个正则表达式,vim 可以为你的正则表达式选择任何开始匹配的点。显然,它选择了第一个 concat 匹配的点(即没有//
or :
)。这些事情通常是通过使用
\v^%(%(\/\/|\:)@!.)*\w$
(删除第一个 concat 和分支本身,更改.*
为%(%(\/\/|\:)@!.)*
; 用等效替换集合\w
;添加指向行开头的锚点):如果您需要匹配整行。或者如果您只需要匹配最后一个字符,则为负向后看。您也可以将锚点添加到变体的第一个 concat(您应该.*
从第一个 concat 中删除尾随,因为它是无用的,并且出于相同的原因分支符号)。
注意:我不知道为什么您的正则表达式适用于评论。在我检查的所有情况下,它都不适用于您需要的注释。
这对你有用吗?
^\(\(//\|:\)\@<!.\)*[a-zA-Z0-9_]$