Як я можу практикувати інтерактивний пошук і заміну регулярними виразами в Emacs?


12

Пошук і заміна за допомогою регулярних виразів - це, очевидно, потужний інструмент для користувача Emacs, який може регулярно виконувати ці дії. Однак, як початківця Emacs (та / або програмування), регулярні вислови потрібно вивчати та практикувати.

Чи можу я вивчати та тренувати регулярні вирази інтерактивно в Emacs, подібно до вбудованого підручника Emacs? Якщо ні, то які інші пропозиції використовувати Emacs для практичного використання регулярних виразів для пошуку та заміни?


1
Ця документація завершена: wikemacs.org/wiki/Regexp
Ehvince

Відповіді:



16

Ви можете спробувати, M-x regexp-builder RETщо це інтерактивний матч регулярних виразів, це непогано


7
Не панікуйте, коли C-gне виходить так, як ви очікували. C-c C-qє типовим прив'язкою клавіш, щоб вийти з конструктора regexp, коли ви закінчите практикуватися.
nispio

5

Я використовую те, regexp-builderщо давайте вам інтерактивно тестувати regexps і отримувати зворотній зв'язок. І звичайно, як тільки я почав це використовувати, я негайно запитав себе: "Як мені вводити цей регулярний вираз query-replace-regexp?"

Відповідь, яку я вибрав, є наступною функцією, визначеною на сторінці 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)))

Отже, мій робочий процес такий:

  1. M-x re-builder
  2. тип типу тип
  3. M-x reb-query-replace

3

Це може бути величезною підмогою при навчанні користуватися регулярними виразами, щоб побачити, що співпадає з якими частинами регулярного виразу - зокрема, групами регулярного виразів. І робити це інтерактивно та поступово.

Уздовж ліній відповіді @ immerr, в бурульки пошук був аналогічне підсвічування в протягом тривалого часу.

введіть тут опис зображення



1

Не в emacs, але http://rubular.com/ в основному regexp-builderз шпаргалкою. Ви можете налаштувати приклад і надати йому посилання на цей приклад. Я використовую це під час обговорення регулярного виразу з командою.


1
Чи використовує Ruby ароматизований Emacs Regexp?
nispio

1

В якості альтернативи Дейву F regexp-builderви також можете створити довільний текст, щоб практикувати відповідність шаблонів проти.

Найбільш корисною особливістю цієї команди є те, що вона виділяє відповідність у буфері, оскільки шаблон створюється, щоб допомогти вам у забезпеченні належного відповідності шаблону.

Використання (query-replace-regexp)( C-M-%) та створення регулярного виразу для виконання потрібної заміни допоможе вам практикувати.


Яку користь пропонує ця особа, яка хоче «практикувати» регулярні вирази, які regexp-builderвже не пропонують? Проблема query-replace-regexpполягає в тому, що вам потрібно написати цілий регулярний вираз і потім взяти на нього зобов'язання, щоб дізнатися, що відповідає. Якщо результат вам не подобається, вам доведеться починати все заново. regexp-builderпоказує матчі на льоту, що полегшує налаштування вашого регулярного гекса, поки він не працює, якщо ви не знаєте, що ви робите.
nispio

1
Я визнаю, що це і є його недоліком. Однак якщо ви знайомі з використанням регулярних виразів query-replace-regexp, ви звикли використовувати його в Emacs саме
Джонатан Ліч-Пепін

Можливо ... але це, здається, не відповідає тому, що просить ОП. "Якщо ви знайомі з регулярними виразами", то вам зовсім не потрібно вивчати регулярні вирази.
nispio

1
ОП запитує, як навчитися / коли інтерактивно використовувати їх як початківця Emacs. Можливо, вони вже мають деякі знання про регулярні викиди з інших типів.
Джонатан Ліч-Пепін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.