¿Cómo hacer coincidir el símbolo en regexp?

9

Estoy tratando de construir una expresión regular que coincida con los símbolos, es decir, cosas como nombres de funciones y similares, de acuerdo con la configuración actual del modo principal (se llama tabla de sintaxis si no recuerdo mal). Después de un poco de investigación, he encontrado estas expresiones regulares útiles:

  • \_< coincide con el comienzo de un símbolo

  • \_> coincide con el final de un símbolo

Ahora creo que necesito descubrir cómo representar el carácter constituyente del símbolo. Tenemos \wcaracteres que constituyen las palabras, pero no puedo encontrar nada para los símbolos. Regexp para coincidir con los símbolos debería ser algo así (suponiendo que \scoincida con los caracteres que constituyen el símbolo):

\_<\s+\_>

¿Me estoy perdiendo de algo? ¿Cómo hacer coincidir los símbolos?


Tenga en cuenta que la coincidencia de palabras no funciona para mí. Un ejemplo trivial es algo así como foo-barun símbolo en el modo Emacs Lisp, pero no una palabra (porque -no es un carácter constitutivo de la palabra).

Mark Karpov
fuente
3
Me suelen utilizar (re-search-forward "\\_<\\(?:\\sw\\|\\s_\\)+\\_>" nil t). Funciona, pero me pregunto si hay un camino más corto.
abo-abo
2
ABO ABO: feo como es, que yo sepa que es lo que hay que hacer, símbolos dados pueden combinar caracteres de símbolos constituyentes y caracteres constitutivo de palabra. Deberías darle una respuesta. Mark, querrás consultar el manual para ver qué \ssignifica realmente, ya que es completamente diferente a tu suposición.
phils
@phils, ni siquiera sabía que eso \stenía algún significado en las expresiones regulares de Emacs, simplemente elegí ese símbolo, por ejemplo.
Mark Karpov
@Mark: Consulte el manual de Elisp, nodo Regexp Backslash .
Drew

Respuestas:

7

¿Qué tiene de malo \_<.*?\_>?

fulvio ciriaco
fuente
Nada en lo que pueda pensar. Muy sensible.
phils