35.6.1 Замена совпавшего текста

Эта функция заменяет все или часть текста, совпавшего с последним поиском. Она работает с помощью данных совпадения.

Функция: replace-match replacement &optional fixedcase literal string subexp

Эта функция выполняет операцию замены в буфере или строке.

Если вы выполняли последний поиск в буфере, вам следует опустить аргумент string или указать для него nil, и убедиться, что текущий буфер — это тот, в котором вы выполняли последний поиск. Затем эта функция редактирует буфер, заменяя совпавший текст на replacement. Она оставляет курсор в конце замененного текста.

Если вы выполняли последний поиск в строке, передайте ту же строку в string. Затем эта функция возвращает новую строку, в которой совпавший текст заменяется на replacement.

Если fixedcase не равен nil, то replace-match использует текст замены без преобразования регистра; в противном случае он преобразует текст замены в зависимости от регистра текста, который заменяется. Если исходный текст полностью заглавными буквами, то текст замены преобразуется в заглавные буквы. Если все слова исходного текста заглавные, то все слова текста замены становятся заглавными. Если все слова состоят из одной буквы и они все заглавные, они рассматриваются как заглавные слова, а не как слова, полностью состоящие из заглавных букв.

Если literal не равен nil, то replacement вставляется в точности так, как он есть, при этом единственными изменениями являются изменения регистра по мере необходимости. Если он равен nil (по умолчанию), то символ ‘\’ обрабатывается особо. Если ‘\’ встречается в replacement, то он должен быть частью одной из следующих последовательностей:

‘\&’

Это означает весь заменяемый текст.

‘\n’, где n — цифра

Это означает текст, совпавший с n-й подвыражением в исходном регулярном выражении. Подвыражения — это выражения, сгруппированные внутри ‘\(…\)’. Если n-е подвыражение никогда не совпало, подставляется пустая строка.

‘\\’

Это означает один символ ‘\’ в тексте замены.

‘\?’

Это означает сам себя (для совместимости с replace-regexp и связанными командами; см. Regexp Replace в Руководстве GNU Emacs).

Любой другой символ после ‘\’ сигнализирует об ошибке.

Подстановки, выполняемые ‘\&’ и ‘\n’, происходят после преобразования регистра, если таковое имеется. Поэтому строки, которые они подставляют, никогда не преобразуются в регистр.

Если subexp не равен nil, это означает, что необходимо заменить только подвыражение с номером subexp из совпавшего регулярного выражения, а не все совпадение. Например, после совпадения ‘foo \(ba*r\)’, вызов replace-match с 1 в качестве subexp означает замену только текста, совпавшего с ‘\(ba*r\)’.

Функция: match-substitute-replacement replacement &optional fixedcase literal string subexp

Эта функция возвращает текст, который был бы вставлен в буфер функцией replace-match, но без изменения буфера. Это полезно, если вы хотите представить пользователю фактический результат замены, с конструкциями вроде ‘\n’ или ‘\&’ подставленными совпавшими группами. Аргументы replacement и необязательные fixedcase, literal, string и subexp имеют то же значение, что и для replace-match.