He estado buscando por todas partes en el emacs lisp documentación de cómo las expresiones regulares de búsqueda en una cadena. Todo lo que puedo encontrar es cómo hacer esto en los búferes.
Hay algo que me falta? Debo escupir mi cadena en un buffer temporal y buscar allí? Es sólo el estilo de codificación de elisp, algo que tendremos que acostumbrarnos a? Hay un estándar de la solución a este problema. La manipulación de los búferes parece cludgy cuando yo debería ser capaz de buscar directamente en una variable ya presente.
Respuestas
¿Demasiados anuncios?Aquí hay una discusión de la cadena de contenido vs contenido de tampón en el Emacs wiki. Sólo la tienda de su cadena como una variable.
Lo difícil acerca de las cadenas es que generalmente no modificar la cadena de sí mismo (excepto en el caso de que se realice funciones de la matriz en la cadena, ya que una cadena es un array, pero esto en general se deben evitar), pero regresa la cadena modificada.
En cualquier caso, aquí es un ejemplo del uso de una cadena en elisp.
Este va a recortar el espacio en blanco del final de una cadena:
(setq test-str "abcdefg ")
(when (string-match "[ \t]*$" test-str)
(message (concat "[" (replace-match "" nil nil test-str) "]")))
Al principio de una cadena de búsqueda
(defun string-starts-with-p (string prefix)
"Return t if STRING starts with PREFIX."
(and
(string-match (rx-to-string `(: bos ,prefix) t)
string)
t))
Para el final de una cadena de búsqueda
(defun string-ends-with-p (string suffix)
"Return t if STRING ends with SUFFIX."
(and (string-match (rx-to-string `(: ,suffix eos) t)
string)
t))