Замена регулярных выражений на Emacs

Я пытаюсь сделатьискать и заменять регулярными выражениями.

Предположим, у меня естьforeach(foo1.txt, foo2.txt, foo3.txt, foo4.txt). And I want to put " around each item in the list.

Я думал - из документации - что это регулярное выражение будет работать (foo[1-4]\.txt) -> "\&".

Но это не так. Что я делаю неправильно?

Ответы на вопрос(4)

потому что они не Perl:

\(foo[1-4]\.txt\)

В Emacs нужно ставить обратную косую черту.

Решение Вопроса

лишние косые черты") впоис регулярное выражение, но не в Заменить регулярное выражение.

Экранирование требуется, потому что парсер lisp видит регулярное выражение перед механизмом регулярных выражений.

Но если вы пишете программно (в отличие от интерактивного ввода), вам нужно избежать побегов! ай-ух-ух ....

interactive:
M-x replace-regexp RET \(obj.method(.*)\{1\}\) RET trim$(\1)

programmatic:
(replace-regexp "\\(obj.method(.*)\\{1\\}\\)" "trim$(\\1)")

сбежавшие паренны сбежали, потому что они группируются, не спасшиеся парнины - буквальные.

Вы можете проверитьEmacs Wiki Regex Crash Course а также Раздел регулярных выражений Emacs Evecs's Эффективного.

 Paul Nathan30 июн. 2009 г., 17:16
Полезно, но немного страшно. "избежать побегов". Meep.

но в этом случае, вероятно, будет проще использовать макросы. Поставьте точку в начале имени и введите:

C-x ( " M-f M-f " C-f C-f C-x )

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

Затем запусти макрос сC-x e. Чтобы повторить, просто нажмитеe опять таки

(В Emacs 23 вы можете использовать F3 вместо 'C-x ( 'и F4 вместо обоих'C-x )' а также 'C-x e».)

\(foo[1-4]\.txt\)

Ваш ответ на вопрос