匹配成员变量的正则表达式

Regular Expression to match member variables

我正在尝试改进 emacs c++ 模式语法突出显示,需要找到一个正则表达式来匹配代码中的成员变量。

我要用正则表达式匹配的是截图中红色的关键词,不是蓝色的。

要查找函数调用(蓝色的),我使用表达式 ([a-zA-Z_]+[a-zA-Z0-9_]*)+[(]

我想修改一下,如果关键字后面有括号,则不匹配。

我认为这应该可以满足您的要求。

(font-lock-add-keywords
 'c++-mode
 '(("\(\_<[a-zA-Z_][a-zA-Z0-9_]*\_>\)[(]" 1 font-lock-function-name-face)
   ("\.\(\_<[a-zA-Z_][a-zA-Z0-9_]*\_>\)" 1 font-lock-variable-name-face)))

我稍微修改了您的第一个正则表达式以尝试解决您的性能问题(请参阅下文的解释)。第二个正则表达式只是将尾随括号替换为前导句点;我们依靠两个正则表达式的顺序来处理匹配两者的方法调用。

正如其他人所提到的,您的性能问题可能是由于正则表达式可以以太多方式匹配。使用符号边界标记 \_<\_> 进行锚定应该会有所帮助。我也对非不相交字符集上的相邻 +* 组感到困扰,但我不知道这是否真的是一个问题。

由于您似乎不想在字符串和注释中突出显示,因此您应该关闭 append。如果您想要突出显示字符串和评论,您可以使用 prepend,而 append 仅在您使用设置 属性 而您的字符串或评论没有设置的面孔时才有用,并且你想把两者结合起来。要了解我在说什么,请尝试将 font-lock-function-name-face 替换为 'hi-yellow。 (引用在这里是相关的,因为高亮面没有像字体锁面那样的可变别名。)