0

在 vim 中,我想使用正则表达式突出显示以字母结尾的每一行,该字母前面没有//noor :。我尝试了以下

syn match systemverilogNoSemi "\(.*\(//\|:\).*\)\@!\&.*[a-zA-Z0-9_]$" oneline

这对注释非常有效,但不适用于包含冒号的行。知道为什么吗?

4

2 回答 2

1

因为有了这个正则表达式,vim 可以为你的正则表达式选择任何开始匹配​​的点。显然,它选择了第一个 concat 匹配的点(即没有//or :)。这些事情通常是通过使用

\v^%(%(\/\/|\:)@!.)*\w$

(删除第一个 concat 和分支本身,更改.*%(%(\/\/|\:)@!.)*; 用等效替换集合\w;添加指向行开头的锚点):如果您需要匹配整行。或者如果您只需要匹配最后一个字符,则为负向后看。您也可以将锚点添加到变体的第一个 concat(您应该.*从第一个 concat 中删除尾随,因为它是无用的,并且出于相同的原因分支符号)。

注意:我不知道为什么您的正则表达式适用于评论。在我检查的所有情况下,它都不适用于您需要的注释。

于 2013-02-20T21:01:50.387 回答
0

这对你有用吗?

^\(\(//\|:\)\@<!.\)*[a-zA-Z0-9_]$
于 2013-02-20T21:08:55.243 回答