Как я могу попрактиковаться в поиске и замене регулярных выражений в интерактивном режиме в Emacs?

12

Поиск и замена с использованием регулярных выражений, несомненно, является мощным инструментом для пользователя Emacs, который может регулярно выполнять эти действия. Однако, как новичок в Emacs (и / или программировании), регулярные выражения необходимо изучать и практиковать.

Могу ли я изучать и обучать регулярные выражения в интерактивном режиме в Emacs, подобно встроенному учебнику Emacs? Если нет, то каковы другие предложения по использованию Emacs для практики использования регулярных выражений для поиска и замены?

Феликс З. Хоффманн
источник
1
Эта документация довольно полная: wikemacs.org/wiki/Regexp
Ehvince,

Ответы:

17

Кроме того, regexp-builderвы можете также рассмотреть возможность использования visual-regexp с визуальной обратной связью в процессе замены:

визуальный снимок регулярного выражения

immerrr
источник
3
Или даже anzu, что делает то же самое и больше.
sanityinc
16

Вы можете попробовать M-x regexp-builder RETинтерактивный сопоставитель регулярных выражений, это неплохо

Дэйв Ф
источник
7
Не паникуйте, когда C-gне выходит, как вы ожидаете. C-c C-qэто связывание по умолчанию для выхода из построителя регулярных выражений, когда вы закончите практиковать.
Nispio
5

Я использую regexp-builderкоторый позволяет вам тестировать регулярные выражения в интерактивном режиме и получать обратную связь. И, конечно, как только я начал использовать это, я сразу же спросил себя: «Как я могу кормить это регулярное выражение 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, в Сосульках поиск был аналогичное подсвечивание в течение длительного времени.

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

Нарисовалась
источник
3

Вы также можете использовать helm-regexp, который отображает группы регулярных выражений отдельно.

Ту До
источник
1

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

Аарон Ли
источник
1
Использует ли Ruby Regexp со вкусом emacs?
Nispio
1

В качестве альтернативы Дэйву Ф. regexp-builderвы также можете создать произвольный текст для сопоставления с образцом.

Наиболее полезная особенность этой команды заключается в том, что она будет подсвечивать совпадения в буфере при создании шаблона, чтобы помочь вам в обеспечении правильного соответствия шаблону.

Использование (query-replace-regexp)( C-M-%) и создание регулярного выражения для выполнения необходимой замены поможет вам попрактиковаться.

Джонатан Лич-Пепин
источник
Какую пользу это дает тому, кто хочет «попрактиковаться» в регулярных выражениях, которые regexp-builderеще не предлагаются? Проблема в query-replace-regexpтом, что вам нужно написать целое регулярное выражение, а затем зафиксировать его, чтобы выяснить, что ему подходит. Если вам не нравится результат, вы должны начать все сначала. regexp-builderпоказывает совпадения на лету, что облегчает настройку регулярного выражения, пока оно не сработает, если вы не знаете, что делаете.
Nispio
1
Я признаю, что это оборотная сторона. Однако, если вы знакомы с использованием регулярных выражений, query-replace-regexpвы привыкнете использовать его именно в Emacs
Jonathan Leech-Pepin
Возможно ... но это, кажется, не соответствует тому, что просит ОП. «Если вы знакомы с регулярными выражениями», то вам вообще не нужно изучать регулярные выражения.
Nispio
1
OP спрашивает, как узнать, как / когда использовать их в интерактивном режиме как новичок в Emacs. Они могут уже иметь некоторые знания регулярных выражений из других типов регулярных выражений.
Джонатан Лич-Пепин