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?


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


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


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

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



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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.