2010-07-19 4 views
36

J'ai cherché partout dans la documentation emacs lisp pour savoir comment rechercher des expressions régulières dans une chaîne. Tout ce que je trouve est de savoir comment faire cela dans les tampons.elisp recherche regexp dans les chaînes, pas les tampons

Y a-t-il quelque chose qui me manque? Devrais-je juste cracher ma chaîne dans un tampon temporaire et la chercher là? Est-ce juste le style de codage d'elisp, quelque chose auquel je vais m'habituer? Existe-t-il une solution standard à ce problème. Manipuler des tampons semble cludgy quand je devrais juste pouvoir chercher directement dans une variable déjà présente. Il suffit de stocker votre chaîne comme variable.

Répondre

25

Here is a discussion of string content vs buffer content in the Emacs wiki. La chose délicate about strings est que vous ne modifiez généralement pas la chaîne elle-même (sauf si vous effectuez des fonctions de tableau sur une chaîne, car une chaîne est un tableau, mais cela devrait généralement être évité), mais vous renvoyez la chaîne modifiée. En tout cas, voici un exemple d'utilisation d'une chaîne dans elisp.

Ce découperons les espaces blancs de la fin d'une chaîne:

(setq test-str "abcdefg ") 
(when (string-match "[ \t]*$" test-str) 
    (message (concat "[" (replace-match "" nil nil test-str) "]"))) 
11

La fonction que vous recherchez est string-match. Si vous devez effectuer la correspondance de manière répétée, utilisez l'index qu'il renvoie en tant que paramètre facultatif "start" pour l'appel suivant. La documentation se trouve dans le manuel ELisp, chapitre "Regular Expression Searching".

3

Pour remplacer toutes les expressions rationnelles dans une chaîne, jetez un oeil à replace-regexp-in-string.

1

Pour rechercher le début d'une chaîne

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

Pour rechercher la fin d'une chaîne

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