Spec-Zone.ru › Elisp

Поиск строк

Это базовые функции для поиска текста в буфере. Они предназначены для использования в программах, но вы можете вызывать их интерактивно. Если вы сделаете это, они запросят строку поиска; аргументы limit и noerror nil, а repeat равен 1. Более подробную информацию об интерактивном поиске см. в разделе Поиск и замена руководства GNU Emacs.

Эти функции поиска преобразуют строку поиска в многобайтовую, если буфер многобайтовый; они преобразуют строку поиска в однобайтовую, если буфер однобайтовый. См. Представления текста.

Команда: search-forward string &optional limit noerror count

Эта функция ищет вперёд от текущей позиции точное совпадение для string. При успехе она устанавливает текущую позицию в конец найденного вхождения и возвращает новое значение позиции. Если совпадение не найдено, значение и побочные эффекты зависят от noerror (см. ниже).

В следующем примере, текущая позиция изначально находится в начале строки. Затем (search-forward "fox") перемещает текущую позицию после последней буквы 'fox':

---------- Buffer: foo ----------
∗The quick brown fox jumped over the lazy dog.
---------- Buffer: foo ----------
(search-forward "fox")
     ⇒ 20

---------- Buffer: foo ----------
The quick brown fox∗ jumped over the lazy dog.
---------- Buffer: foo ----------

Аргумент limit задаёт границу поиска и должен быть позицией в текущем буфере. Совпадение, простирающееся за эту позицию, не принимается. Если limit опущен или nil, он по умолчанию устанавливается в конец доступной части буфера.

То, что произойдёт, если поиск не удастся, зависит от значения noerror. Если noerror nil, сигнализируется ошибка search-failed. Если noerror t, search-forward возвращает nil и ничего не делает. Если noerror ни nil ни t, то search-forward перемещает текущую позицию к верхней границе и возвращает nil.

Аргумент noerror влияет только на успешные поиски, которые не находят совпадения. Неверные аргументы вызывают ошибки независимо от noerror.

Если count является положительным числом n, поиск выполняется n раз; каждый последующий поиск начинается с конца предыдущего совпадения. Если все эти последовательные поиски завершаются успешно, вызов функции успешен, перемещая позицию и возвращая её новое значение. В противном случае вызов функции терпит неудачу, с результатами, зависящими от значения noerror, как описано выше. Если count является отрицательным числом -n, поиск выполняется n раз в обратном (обратном) направлении.

Команда: search-backward string &optional limit noerror count

Эта функция ищет назад от текущей позиции string. Она похожа на search-forward, за исключением того, что ищет назад, а не вперед. Обратные поиски оставляют текущую позицию в начале совпадения.

Команда: word-search-forward string &optional limit noerror count

Эта функция ищет вперёд от текущей позиции совпадение по слову для string. Если она находит совпадение, она устанавливает текущую позицию в конец найденного совпадения и возвращает новое значение позиции.

Сопоставление по словам рассматривает string как последовательность слов, игнорируя знаки препинания, которые их разделяют. Она ищет в буфере ту же последовательность слов. Каждое слово должно быть отличным в буфере (поиск слова 'ball' не соответствует слову 'balls'), но детали знаков препинания и пробелов игнорируются (поиск 'ball boy' соответствует 'ball. Boy!').

В этом примере, текущая позиция изначально находится в начале буфера; поиск оставляет её между 'y' и '!'.

---------- Buffer: foo ----------
∗He said "Please!  Find
the ball boy!"
---------- Buffer: foo ----------
(word-search-forward "Please find the ball, boy.")
     ⇒ 39

---------- Buffer: foo ----------
He said "Please!  Find
the ball boy∗!"
---------- Buffer: foo ----------

Если limit не nil, он должен быть позицией в текущем буфере; он определяет верхнюю границу поиска. Найденное совпадение не должно выходить за эту позицию.

Если noerror nil, то word-search-forward сигнализирует об ошибке, если поиск не удался. Если noerror t, то он возвращает nil вместо сигнализации об ошибке. Если noerror ни nil ни t, то она перемещает текущую позицию к limit (или концу доступной части буфера) и возвращает nil.

Если count является положительным числом, оно определяет, сколько последовательных вхождений искать. Текущая позиция устанавливается в конец последнего совпадения. Если count отрицательно, поиск выполняется назад, и текущая позиция устанавливается в начало последнего совпадения.

Внутренне, word-search-forward и связанные функции используют функцию word-search-regexp для преобразования string в регулярное выражение, которое игнорирует знаки препинания.

Команда: word-search-forward-lax string &optional limit noerror count

Эта команда идентична word-search-forward, за исключением того, что начало или конец string не обязательно должны совпадать с границей слова, если только string не начинается или не заканчивается пробелом. Например, поиск 'ball boy' соответствует 'ball boyee', но не соответствует 'balls boy'.

Команда: word-search-backward string &optional limit noerror count

Эта функция ищет назад от текущей позиции совпадение по слову для string. Эта функция аналогична word-search-forward за исключением того, что она ищет назад и обычно оставляет текущую позицию в начале совпадения.

Команда: word-search-backward-lax string &optional limit noerror count

Эта команда идентична word-search-backward, за исключением того, что начало или конец string не обязательно должны совпадать с границей слова, если только string не начинается или не заканчивается пробелом.

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/String-Search.html

Spec-Zone.ru

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