Следующий: Поиск и регистр, Предыдущий: Поиск и совпадение   [Оглавление][Указатель]


35.1 Поиск строк

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

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

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

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

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

---------- Буфер: foo ----------
∗The quick brown fox jumped over the lazy dog.
---------- Буфер: foo ----------

(search-forward "fox")
     ⇒ 20

---------- Буфер: foo ----------
The quick brown fox∗ jumped over the lazy dog.
---------- Буфер: 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» и «!».

---------- Буфер: foo ----------
∗He said "Please!  Find
the ball boy!"
---------- Буфер: foo ----------

(word-search-forward "Please find the ball, boy.")
     ⇒ 39

---------- Буфер: foo ----------
He said "Please!  Find
the ball boy∗!"
---------- Буфер: 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 не начинается или не заканчивается пробелом.


Следующий: Поиск и регистр, Предыдущий: Поиск и совпадение   [Оглавление][Указатель]