Wie kann ich in Emacs das interaktive Suchen und Ersetzen durch reguläre Ausdrücke üben?

12

Das Suchen und Ersetzen mit regulären Ausdrücken ist für den Emacs-Benutzer ein leistungsstarkes Werkzeug, mit dem er diese Aktionen routinemäßig ausführen kann. Als Emacs-Anfänger (und / oder Programmieranfänger) müssen reguläre Ausdrücke erlernt und geübt werden.

Kann ich reguläre Ausdrücke in Emacs interaktiv lernen und trainieren , ähnlich wie im integrierten Emacs-Lernprogramm? Wenn nicht, was sind andere Vorschläge, um mit Emacs die Verwendung regulärer Ausdrücke zum Suchen und Ersetzen zu üben?

Felix Z. Hoffmann
quelle
1
Diese Dokumentation ist ein bisschen
Ehvince

Antworten:

17

Außerdem regexp-builderSie auch interessieren könnten visual-regexp Sie mit visuellem Feedback auf das ersetzen im Gange zu schaffen:

Schnappschuss von visuellem Ausdruck

immerrr
quelle
3
Oder sogar anzu, was dasselbe und noch mehr bewirkt.
Sanityinc
16

Sie können versuchen M-x regexp-builder RET, einen interaktiven Matcher für reguläre Ausdrücke zu finden, das ist nicht schlecht

Dave F
quelle
7
Keine Panik, wenn C-gnicht wie erwartet Schluss ist. C-c C-qDies ist die Standardtastenkombination, um den Regexp-Generator zu beenden, wenn Sie mit dem Üben fertig sind.
Nispio
5

Ich benutze regexp-builderdas, mit dem Sie Regexps interaktiv testen und Feedback erhalten. Und nachdem ich damit angefangen hatte, fragte ich mich natürlich sofort: "Wie füttere ich diesen regulären Ausdruck query-replace-regexp?"

Die Antwort, die ich gewählt habe, ist die folgende Funktion, die auf der EmacsWiki ReBuilder- Seite definiert ist.

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

Mein Workflow ist also:

  1. M-x re-builder
  2. Typ Typ Typ
  3. M-x reb-query-replace
Mr. Wacky
quelle
3

Es kann eine enorme Hilfe sein, wenn Sie lernen, wie man reguläre Ausdrücke verwendet, um festzustellen, welche Teile eines regulären Ausdrucks mit welchen übereinstimmen - insbesondere reguläre Ausdrücke in Gruppen. Und das interaktiv und inkrementell.

Nach dem Vorbild der @ immerr Antwort, Icicles Suche hat ähnlich hat Hervorhebung für eine lange Zeit.

Bildbeschreibung hier eingeben

Drew
quelle
1

Nicht innerhalb von Emacs, aber http://rubular.com/ ist im Grunde regexp-buildermit einem Spickzettel. Sie können ein Beispiel einrichten und einen Link zu diesem Beispiel ausspucken lassen . Ich benutze dies, wenn ich mit einem Team über Regex diskutiere.

Aaron Lee
quelle
1
Verwendet Ruby Regexp mit Emacs-Geschmack?
Nispio
1

Alternativ zu Dave F regexp-builderkönnen Sie auch beliebigen Text erstellen, um den Mustervergleich zu üben.

Das nützlichste Merkmal dieses Befehls ist, dass es Übereinstimmungen im Puffer hervorhebt, wenn das Muster erstellt wird, um Sie bei der Sicherstellung der richtigen Musterübereinstimmungen zu unterstützen.

Wenn Sie (query-replace-regexp)( C-M-%) verwenden und einen regulären Ausdruck erstellen, um die gewünschte Ersetzung durchzuführen, können Sie üben.

Jonathan Leech-Pepin
quelle
Welchen Nutzen bietet dieses Angebot für jemanden, der reguläre Ausdrücke "üben" möchte, die es regexp-buildernoch nicht gibt? Das Problem dabei query-replace-regexpist, dass Sie einen gesamten regulären Ausdruck schreiben und dann darauf festlegen müssen, um herauszufinden, was damit übereinstimmt. Wenn Ihnen das Ergebnis nicht gefällt, müssen Sie von vorne beginnen. regexp-builderZeigt Übereinstimmungen im laufenden Betrieb an, wodurch es einfacher wird, Ihre reguläre Ausdrucksweise zu optimieren, bis sie funktioniert, wenn Sie nicht wissen, was Sie tun.
Nispio
1
Ich gebe zu, das ist der Nachteil. Wenn Sie jedoch mit regulären Ausdrücken vertraut sind, query-replace-regexpwerden Sie sich daran gewöhnen, sie speziell in Emacs zu verwenden
Jonathan Leech-Pepin,
Vielleicht ... aber es scheint nicht mit dem übereinzustimmen, wonach das OP verlangt. "Wenn Sie mit regulären Ausdrücken vertraut sind", müssen Sie die regulären Ausdrücke überhaupt nicht lernen .
Nispio
1
OP fragt, wie man lernt, wie und wann man sie als Emacs-Anfänger interaktiv einsetzt . Möglicherweise verfügen sie bereits über einige reguläre Ausdrücke aus anderen regulären Ausdrücken.
Jonathan Leech-Pepin