2010-12-04 30 views
0

J'écris un mode Emacs majeur pour un langage de base que j'implémente. Je veux mettre en évidence la syntaxe pour les appels de méthode où le nom de la méthode est vérifiée par [a-z][^()]* mais seulement si elle est suivie de ([^)]). Comment définir une expression régulière qui correspond à la première partie si elle est suivie de la deuxième partie, mais ne met pas en évidence la deuxième partie?Elisp regexp: groupe de correspondance si suivi d'une autre expression rationnelle

Répondre

1

Essayez ceci:

(font-lock-add-keywords 'my-mode 
    '(("\\(\\b[a-z][^()]*\\)([^)]*)" 
    1 font-lock-function-name-face t))) 

Le 1 dit d'appliquer le point culminant de la première sous-expression.

Note: J'ai ajouté un \\b pour le faire correspondre que lorsque le [a-z] commence un mot (sinon Dude() aurait le ude mis en évidence), et j'ai ajouté un * dans la dernière série de parens b/c il semblait qu'il était disparu. Je l'ai testé en mode C++ -

Vous trouverez la documentation pour les mots-clés-font-lock-add et d'autres verrous de polices here.