41 votos

ELisp regexp búsqueda en cadenas, no tampones

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.

28voto

Peter Ajtai Puntos 26377

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) "]")))

12voto

Thomas Kappler Puntos 1699

La función que buscas es string-match . Si usted necesita hacer el juego varias veces, utilice el índice devuelve como parámetro opcional "start" para la siguiente llamada. La documentación está en el manual, capítulo de ELisp "Búsqueda de expresión Regular".

3voto

egdmitry Puntos 483

Reemplazar cada regexp partido en una cadena de echar un vistazo a replace-regexp-in-string .

1voto

xaccrocheur Puntos 2083

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))

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X