Comment puis-je pratiquer la recherche et le remplacement par des expressions régulières de manière interactive dans Emacs?

12

La recherche et le remplacement à l'aide d'expressions régulières sont clairement un outil puissant pour l'utilisateur Emacs qui peut régulièrement effectuer ces actions. Cependant, en tant que débutant Emacs (et / ou programmation), les expressions régulières doivent être apprises et pratiquées.

Puis-je apprendre et former des expressions régulières de manière interactive dans Emacs, de la même manière que le didacticiel Emacs intégré? Sinon, quelles sont les autres suggestions pour utiliser Emacs pour pratiquer l'utilisation d'expressions régulières pour la recherche et le remplacement?

Felix Z. Hoffmann
la source
1
Cette documentation est un peu complète: wikemacs.org/wiki/Regexp
Ehvince

Réponses:

17

En outre, regexp-buildervous pouvez également envisager visual-regexp pour vous fournir des commentaires visuels sur le remplacement en cours:

instantané visuel-regexp

immerrr
la source
3
Ou même anzu, ce qui fait la même chose et plus encore.
sanityinc
16

Vous pouvez essayer M-x regexp-builder RETun matcher d'expression régulière interactif, ce n'est pas mal

Dave F
la source
7
Ne paniquez pas lorsque vous C-gne quittez pas comme prévu. C-c C-qest le raccourci clavier par défaut pour quitter le générateur d'expressions rationnelles lorsque vous avez fini de vous entraîner.
nispio
5

J'utilise regexp-builderce qui vous permet de tester les expressions rationnelles de manière interactive et d'obtenir des commentaires. Et bien sûr, une fois que j'ai commencé à l'utiliser, je me suis immédiatement demandé "Comment puis-je alimenter cette expression régulière query-replace-regexp?"

La réponse que j'ai choisie est la fonction suivante définie sur la page EmacsWiki ReBuilder .

(defun reb-query-replace (to-string)
  "Replace current RE from point with `query-replace-regexp'."
  (interactive
   (progn (barf-if-buffer-read-only)
          (list (query-replace-read-to (reb-target-binding reb-regexp)
                                       "Query replace"  t))))
  (with-current-buffer reb-target-buffer
    (query-replace-regexp (reb-target-binding reb-regexp) to-string)))

Mon workflow est donc:

  1. M-x re-builder
  2. type type type
  3. M-x reb-query-replace
Mr. Wacky
la source
3

Cela peut être d'une grande aide lorsque vous apprenez à utiliser des expressions rationnelles pour voir ce qui correspond à quelles parties d'une expression rationnelle - en particulier, les groupes d'expression rationnelle. Et pour le faire de manière interactive et incrémentielle.

Dans la lignée de la réponse de @ immerr, la recherche Icicles a longtemps été mise en évidence de la même manière.

entrez la description de l'image ici

A dessiné
la source
1

Pas dans emacs, mais http://rubular.com/ est essentiellement regexp-builderavec un cheat-sheet. Vous pouvez configurer un exemple et lui faire cracher un lien vers cet exemple. Je l'utilise lorsque je discute de regex avec une équipe.

Aaron Lee
la source
1
Ruby utilise-t-il Regexp à saveur emacs?
nispio
1

Comme alternative à Dave F, regexp-buildervous pouvez également créer du texte arbitraire pour pratiquer la correspondance de motifs.

La caractéristique la plus utile de cette commande est qu'elle mettra en surbrillance les correspondances dans le tampon au fur et à mesure que le modèle est créé pour vous aider à garantir les correspondances de modèle appropriées.

L'utilisation de (query-replace-regexp)( C-M-%) et la création d'une expression régulière pour effectuer le remplacement souhaité vous aideront à vous entraîner.

Jonathan Leech-Pepin
la source
Quel avantage cela offre-t-il à quelqu'un qui souhaite "pratiquer" des expressions régulières qui regexp-builderne le proposent pas déjà? Le problème query-replace-regexpest que vous devez écrire une expression rationnelle entière, puis vous y engager pour savoir à quoi elle correspond. Si vous n'aimez pas le résultat, vous devez tout recommencer. regexp-builderaffiche les matchs à la volée, ce qui facilite le réglage de votre expression rationnelle jusqu'à ce que cela fonctionne si vous ne savez pas ce que vous faites.
nispio
1
J'avoue que c'est le revers de la médaille. Cependant, si vous êtes familier avec les expressions régulières query-replace-regexp, vous vous habituerez à l'utiliser spécifiquement dans Emacs
Jonathan Leech-Pepin
Peut-être ... mais cela ne semble pas correspondre à ce que le PO demande. "Si vous êtes familier avec les expressions régulières", vous n'avez pas du tout besoin d' apprendre les expressions régulières.
nispio
1
OP demande comment apprendre / quand les utiliser de manière interactive en tant que débutant Emacs. Ils peuvent déjà avoir des connaissances sur les expressions rationnelles d'autres types d'expressions rationnelles.
Jonathan Leech-Pepin