29 votes

Elisp recherche regexp dans les chaînes, pas les tampons

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, c'est comment le faire dans les buffers.

Est-ce que j'ai raté quelque chose ? Devrais-je simplement diviser ma chaîne dans un tampon temporaire et le rechercher là-bas ? Est-ce simplement le style de codage d'elisp, quelque chose à quoi je vais m'habituer ? Existe-t-il une solution standard à ce problème ? Manipuler les buffers semble un peu maladroit lorsque je pourrais simplement rechercher directement dans une variable déjà présente.

23voto

Peter Ajtai Points 26377

Voici une discussion sur le contenu des chaînes par rapport au contenu du tampon dans le wiki d'Emacs. Il suffit de stocker votre chaîne en tant que variable.

La chose délicate à propos des chaînes est que vous ne modifiez généralement pas la chaîne elle-même (à moins d'effectuer des fonctions de tableau sur la chaîne, puisqu'une chaîne est un tableau, mais cela devrait généralement être évité), mais vous retournez la chaîne modifiée.

En tout cas, voici un exemple d'utilisation d'une chaîne en elisp.

Ceci va supprimer les espaces blancs à la fin d'une chaîne :

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

10voto

Thomas Kappler Points 1699

La fonction que vous recherchez est string-match. Si vous devez effectuer la recherche de manière répétée, utilisez l'index renvoyé comme paramètre optionnel "start" pour l'appel suivant. La documentation se trouve dans le manuel ELisp, chapitre "Recherche d'expressions régulières".

2voto

egdmitry Points 483

Pour remplacer chaque correspondance regexp dans une chaîne, jetez un œil à replace-regexp-in-string.

0voto

xaccrocheur Points 2083

Pour rechercher le début d'une chaîne de caractères

(defun string-starts-with-p (string prefix)
    "Retourne t si STRING commence par PREFIX."
    (and
     (string-match (rx-to-string `(: bos ,prefix) t)
                   string)
     t))

Pour rechercher la fin d'une chaîne de caractères

(defun string-ends-with-p (string suffix)
  "Retourne t si STRING se termine par SUFFIX."
  (and (string-match (rx-to-string `(: ,suffix eos) t)
                     string)
       t))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X