Spec-Zone.ru › Elisp

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

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

Функция: 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 и похожими командами; см. Замена по регулярному выражению в Руководстве по 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.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Replacing-Match.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API