Comment faire correspondre le symbole dans l'expression régulière?

9

J'essaie de construire une expression régulière qui correspondrait à des symboles, c'est-à-dire à des choses comme les noms de fonction et autres, selon les paramètres actuels du mode principal (cela s'appelle une table de syntaxe si je me souviens bien). Après quelques recherches, j'ai trouvé ces expressions rationnelles utiles:

  • \_< correspond au début d'un symbole

  • \_> correspond à la fin d'un symbole

Maintenant, je pense que je dois découvrir comment représenter le caractère constituant un symbole. Nous avons \wpour les caractères constitutifs des mots, mais je ne trouve rien pour les symboles. L'expression régulière pour faire correspondre les symboles devrait être quelque chose comme (en supposant que les \scorrespondances sur les caractères constitutifs des symboles):

\_<\s+\_>

Suis-je en train de manquer quelque chose? Comment faire correspondre les symboles?


Notez que l'appariement des mots ne fonctionne pas pour moi. Un exemple trivial est quelque chose comme foo-barça est un symbole en mode Emacs Lisp, mais pas un mot (car ce -n'est pas un caractère constituant un mot).

Mark Karpov
la source
3
J'utilise généralement (re-search-forward "\\_<\\(?:\\sw\\|\\s_\\)+\\_>" nil t). Cela fonctionne, mais je me demande s'il existe un moyen plus court.
abo-abo
2
ABO-abo: laid comme il est, autant que je sache qui est ce que vous devez faire, les symboles donnés peuvent contenir des caractères symboles constitutifs et les caractères constitutifs mot. Vous devriez en faire une réponse. Mark, vous voudrez vérifier le manuel pour voir ce \sque cela signifie réellement, car il est entièrement différent de votre hypothèse.
phils
@phils, je ne savais même pas que cela \savait un sens dans les expressions rationnelles Emacs, je viens de choisir ce symbole par exemple.
Mark Karpov
@Mark: Voir le manuel Elisp, node Regexp Backslash .
Drew

Réponses:

7

Qu'est-ce qui ne va pas \_<.*?\_>?

fulvio ciriaco
la source
Rien à quoi je peux penser. Très raisonnable.
phils