2010-07-19 6 views
36

He estado buscando en todas partes en la documentación de emacs lisp cómo buscar expresiones regulares en una cadena. Todo lo que encuentro es cómo hacer esto en los buffers.búsqueda de elisp regexp en cadenas, no en buffers

¿Hay algo que me falta? ¿Debo simplemente escupir mi cuerda en un buffer temporal y buscarla allí? ¿Es este el estilo de codificación de elisp, algo a lo que me acostumbraré? ¿Hay una solución estándar para este problema? La manipulación de almacenamientos intermedios parece poco clara cuando debería ser capaz de buscar directamente en una variable ya presente.

Respuesta

25

Here is a discussion of string content vs buffer content in the Emacs wiki. Simplemente almacene su cadena como una variable. Lo complicado about strings es que generalmente no modifica la cadena en sí (excepto si realiza funciones de matriz en cadena, ya que una cadena es una matriz, pero esto generalmente debe evitarse), pero devuelve la cadena modificada.

En cualquier caso, aquí hay un ejemplo del uso de una cadena en elisp.

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

La función que está buscando es string-match. Si necesita repetir el emparejamiento, use el índice que devuelve como el parámetro opcional de "inicio" para la próxima llamada. La documentación se encuentra en el manual de ELisp, capítulo "Búsqueda de expresiones regulares".

3

Para reemplazar cada coincidencia de expresiones regulares en una cadena, consulte replace-regexp-in-string.

1

Para buscar en el principio de una cadena

(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 buscar el final de una cadena

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