Come posso esercitarmi nella ricerca e nella sostituzione interattive con espressioni regolari in Emacs?


12

La ricerca e la sostituzione mediante espressioni regolari è chiaramente un potente strumento per l'utente di Emacs che può eseguire abitualmente queste azioni. Tuttavia, come principiante di Emacs (e / o programmazione), le espressioni regolari devono essere apprese e praticate.

Posso imparare e addestrare le espressioni regolari in modo interattivo in Emacs, in modo simile al tutorial Emacs integrato? In caso contrario, quali sono altri suggerimenti per utilizzare Emacs per esercitarsi nell'uso delle espressioni regolari per la ricerca e la sostituzione?


1
Questa documentazione è in qualche modo
Ehvince,

Risposte:


17

Inoltre regexp-builderpotresti anche considerare visual-regexp per fornirti un feedback visivo sulla sostituzione in corso:

snapshot visual-regexp


3
O addirittura anzu, che fa lo stesso e altro.
sanityinc

16

Puoi provare M-x regexp-builder RETquale è un abbinamento interattivo di espressioni regolari, non è male


7
Non C-gfarti prendere dal panico quando non esce come ti aspetti. C-c C-qè il keybinding predefinito per uscire dal builder regexp quando hai finito di esercitarti.
nispio,

5

Uso quello regexp-builderche ti permette di testare regexps in modo interattivo e ottenere feedback. E naturalmente, una volta che ho iniziato a usarlo, mi sono subito chiesto "Come posso alimentare questa regexp query-replace-regexp?"

La risposta che ho scelto è la seguente funzione definita nella pagina 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)))

Quindi il mio flusso di lavoro è:

  1. M-x re-builder
  2. tipo tipo tipo
  3. M-x reb-query-replace

3

Può essere di grande aiuto quando si impara ad usare regexps per vedere cosa corrisponde a quali parti di un regexp - in particolare, gruppi di regexp. E per farlo in modo interattivo e incrementale.

Lungo le linee di risposta di @ immerr, Icicles ricerca ha avuto simili evidenziazione per lungo tempo.

inserisci qui la descrizione dell'immagine



1

Non all'interno di Emacs, ma http://rubular.com/ è fondamentalmente regexp-buildercon un cheat-sheet. Puoi creare un esempio e far sputare un link a quell'esempio. Lo uso quando discuto di regex con una squadra.


1
Ruby usa Regexp al gusto di emacs?
nispio,

1

In alternativa a Dave F regexp-builderpuoi anche creare un testo arbitrario per esercitarti con la corrispondenza dei pattern.

La caratteristica più utile di questo comando è che evidenzierà le corrispondenze nel buffer man mano che il pattern viene creato per aiutarti a garantire le corrispondenze del pattern appropriate.

L'uso di (query-replace-regexp)( C-M-%) e la creazione di un'espressione regolare per eseguire la sostituzione desiderata ti aiuterà a esercitarti.


Che vantaggio offre questo a qualcuno che vuole "praticare" espressioni regolari che regexp-buildernon offre già? Il problema query-replace-regexpè che devi scrivere un'intera regexp e poi impegnarti per scoprire a cosa corrisponde. Se non ti piace il risultato, devi ricominciare tutto da capo. regexp-buildermostra le partite al volo, il che rende più semplice modificare la tua regexp finché non funziona se non sai cosa stai facendo.
nispio,

1
Devo ammettere che questo è il rovescio della medaglia. Tuttavia, se hai familiarità con le espressioni regolari query-replace-regexp, ti abituerai ad usarlo in modo specifico in Emacs
Jonathan Leech-Pepin

Forse ... ma non sembra corrispondere a ciò che l'OP chiede. "Se hai familiarità con le espressioni regolari", allora non hai davvero bisogno di imparare le espressioni regolari.
nispio,

1
OP sta chiedendo come imparare come / quando utilizzarli in modo interattivo come principiante di Emacs. Potrebbero già avere una certa conoscenza di regexp da altri tipi di regexp.
Jonathan Leech-Pepin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.