我在.vimrc
中使用以下内容来匹配大写字符串并突出显示它们:
match Macro /\v<[A-Z|_]{2,}>/
但是,我不想要匹配评论(即//
位于同一行中的文字之前或文本被/*
包围的位置和*/
)。
如何修改上述内容以实现此目的?
答案 0 :(得分:3)
我假设您的正则表达式中的|
应该表示&#34;或。&#34;它没有:在括号内,没有&#34;或&#34;是必须的。您的|
指的是实际字符|
。
这个正则表达式应该在98%的时间内完成这个技巧,可能更多:
\v(\/\/[^\n]*|\/\*(\_[^*]|\*\_[^/])*)@<!<[A-Z_]{2,}>
它使用正向lookbehind确保同一行中的字符串前面没有//
,并且前面没有/*
后面没有*/
。它在以下情况下失败:
if (string == "/*") { // Looks like the start of a block comment
return CONSTANT; // Won't be highlighted
}
如果你想要比这更好的结果(也就是说,如果你担心在遇到错误时你会对这个问题有所了解),那么你可以让它变得更加复杂。多么复杂取决于你的语言。例如,在JavaScript中,您需要担心正则表达式文字和字符串:
// Looks like a comment after the "//" in the regex:
if (/\//.test(string)) return CONSTANT; // Won't be highlighted
如果您想了解正则表达式与正则表达式匹配的复杂程度,请查看我的答案here。