Como combinar o símbolo no regexp?

9

Estou tentando construir uma expressão regular que corresponda a símbolos, ou seja, coisas como nomes de funções e afins, de acordo com as configurações atuais do modo principal (é chamada tabela de sintaxe, se bem me lembro). Após alguma investigação, encontrei esses regexps úteis:

  • \_< corresponde ao início de um símbolo

  • \_> corresponde ao final de um símbolo

Agora acho que preciso descobrir como representar o caráter constituinte do símbolo. Temos \wpara caracteres constituintes da palavra, mas não consigo encontrar nada para símbolos. Regexp para corresponder aos símbolos deve ser algo como (assumindo que \scorrespondências nos caracteres constituintes do símbolo):

\_<\s+\_>

Estou esquecendo de algo? Como combinar símbolos?


Observe que a correspondência de palavras não funciona para mim. Exemplo trivial é algo assim: foo-baré um símbolo no modo Emacs Lisp, mas não uma palavra (porque -não é um caractere constituinte da palavra).

Mark Karpov
fonte
3
Eu normalmente uso (re-search-forward "\\_<\\(?:\\sw\\|\\s_\\)+\\_>" nil t). Funciona, mas me pergunto se há um caminho mais curto.
abo-abo
2
abo-abo: feio como é, AFAIK é isso que você precisa fazer, dadas símbolos podem conter ambos os personagens-símbolo constituintes e personagens palavra-constituintes. Você deve fazer disso uma resposta. Marque, você vai querer verificar o manual para ver o que \srealmente significa, pois é totalmente diferente da sua suposição.
phils
@ phils, eu nem sabia que isso \stinha algum significado nos regexps do Emacs, apenas escolhi esse símbolo, por exemplo.
Mark Karpov
@ Mark: Consulte o manual Elisp, nó Regexp Backslash .
Tirou

Respostas:

7

O que há de errado \_<.*?\_>?

fulvio ciriaco
fonte
Nada que eu possa pensar. Muito sensível.
phils