Jak ćwiczyć wyszukiwanie i zastępowanie wyrażeń regularnych interaktywnie w Emacsie?

12

Wyszukiwanie i zamiana za pomocą wyrażeń regularnych jest oczywiście potężnym narzędziem dla użytkownika Emacsa, który może rutynowo wykonywać te czynności. Jednak jako początkujący Emacs (i / lub programista) należy nauczyć się i ćwiczyć wyrażenia regularne.

Czy mogę uczyć się i trenować wyrażenia regularne interaktywnie w Emacsie, podobnie jak wbudowany samouczek Emacsa? Jeśli nie, jakie są inne sugestie dotyczące wykorzystania Emacsa do ćwiczenia używania wyrażeń regularnych do wyszukiwania i zamiany?

Felix Z. Hoffmann
źródło
1
Ta dokumentacja jest dość
Ehvince

Odpowiedzi:

17

Poza tym regexp-buildermożesz również rozważyć wyrażenie wizualne regexp, aby uzyskać wizualną informację zwrotną na temat trwającego zastępowania:

migawka visual-regexp

immerrr
źródło
3
Lub nawet anzu, co robi to samo i więcej.
sanityinc
16

Możesz spróbować, M-x regexp-builder RETktóry jest interaktywnym dopasowaniem wyrażeń regularnych, co nie jest złe

Dave F.
źródło
7
Nie panikuj, gdy C-gnie wyjdzie tak, jak się spodziewasz. C-c C-qjest domyślnym skrótem klawiszowym pozwalającym wyjść z konstruktora wyrażeń regularnych po zakończeniu ćwiczeń.
nispio
5

Używam, regexp-builderktóry pozwala interaktywnie testować wyrażenia regularne i uzyskiwać informacje zwrotne. I oczywiście, kiedy zacząłem z tego korzystać, od razu zadałem sobie pytanie: „Jak mam nakarmić to wyrażenie regularne query-replace-regexp?”

Odpowiedź, którą wybrałem, to następująca funkcja zdefiniowana na stronie 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)))

Więc mój przepływ pracy to:

  1. M-x re-builder
  2. typ typ typ
  3. M-x reb-query-replace
Pan Wacky
źródło
3

Może to być ogromna pomoc w nauce używania wyrażeń regularnych, aby zobaczyć, co odpowiada poszczególnym częściom wyrażeń regularnych - w szczególności grup wyrażeń regularnych. I robić to interaktywnie i przyrostowo.

Wzdłuż linii odpowiedzi @ immerr, wyszukiwanie Sople od dawna ma podobne podkreślenie .

wprowadź opis zdjęcia tutaj

Rysował
źródło
1

Nie w emacs, ale http://rubular.com/ jest w zasadzie regexp-builderz ściągawką. Możesz skonfigurować przykład i wypluć link do tego przykładu. Używam tego podczas omawiania wyrażenia regularnego z zespołem.

Aaron Lee
źródło
1
Czy Ruby używa Regexp o smaku emacs?
nispio
1

Jako alternatywę dla Dave'a F. regexp-buildermożesz również utworzyć dowolny tekst, aby przećwiczyć dopasowanie wzorca.

Najbardziej użyteczną funkcją tego polecenia jest to, że podświetli dopasowania w buforze podczas tworzenia wzorca, aby pomóc w zapewnieniu prawidłowego dopasowania wzorca.

Użycie (query-replace-regexp)( C-M-%) i utworzenie wyrażenia regularnego w celu wykonania zamiany pomoże ci ćwiczyć.

Jonathan Leech-Pepin
źródło
Jakie korzyści oferuje ta osoba, która chce „ćwiczyć” wyrażenia regularne, które regexp-buildernie są jeszcze oferowane? Problem query-replace-regexppolega na tym, że musisz napisać całe wyrażenie regularne, a następnie zatwierdzić je, aby dowiedzieć się, co pasuje. Jeśli nie podoba ci się wynik, musisz zacząć wszystko od nowa. regexp-builderpokazuje mecze w locie, co ułatwia poprawianie wyrażenia regularnego, dopóki nie zadziała, jeśli nie wiesz, co robisz.
nispio
1
Przyznaję, że to wada. Jeśli jednak znasz wyrażenia regularne query-replace-regexp, przyzwyczaisz się do używania ich w Emacsie, w szczególności
Jonathan Leech-Pepin
Być może ... ale nie pasuje do tego, o co prosi OP. „Jeśli znasz wyrażenia regularne”, to tak naprawdę wcale nie musisz uczyć się wyrażeń regularnych.
nispio
1
OP pyta, jak dowiedzieć się, jak / kiedy używać ich interaktywnie jako początkujący Emacs. Mogą już mieć wiedzę na temat wyrażeń regularnych z innych typów wyrażeń regularnych.
Jonathan Leech-Pepin