Как вы выполняете запрос-replace-regexp в Emacs, который будет соответствовать нескольким строкам?
как тривиальный пример, я бы хотел, чтобы <p>\(.*?\)</p> соответствовал
<p>foo
bar
</p>
Ответ 1
Попробуйте использовать классы символов. Пока вы используете только набор символов ASCII, вы можете использовать [[:ascii:]] вместо точки. Использование более длинного [[:ascii:][:nonascii:]] должно работать для всего.
Ответ 2
M-x re-builder
- твой друг. И это привело меня к этому регулярному выражению:
"<p>\\(.\\|\n\\)*</p>"
который является строковой версией
<p>\(.\|^J\)*</p> ;# where you enter ^J by C-q C-j
И это работает для меня, когда я выполняю повторный поиск вперед, но не тогда, когда я делаю 'query-replace-regexp. Неужели почему...
Теперь, когда вы делаете 're-search-forward (aka C-u C-s), вы можете ввести M-%, который предложит вам заменить (как на Emacs 22). Таким образом, вы можете использовать это для поиска и замены с помощью указанного выше регулярного выражения.
Обратите внимание, что указанное выше regexp будет соответствовать до тех пор, пока в буфере не будет найден последний </p>, который, вероятно, не тот, который вы хотите, поэтому используйте re-builder для создания регулярного выражения, которое приближается к тому, что вы хотите. Очевидно, что регулярные выражения не могут подсчитывать круглые скобки, поэтому вы сами по себе - зависит от того, насколько надежным будет ваше решение.