Spec-Zone.ru › Elisp

Функции для регулярных выражений

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

Функция: regexp-quote string

Эта функция возвращает регулярное выражение, единственное точное совпадение которого — string. Использование этого регулярного выражения в looking-at будет успешным только в том случае, если следующие символы в буфере — string; при использовании в функции поиска совпадение будет найдено, если искомый текст содержит string. См. Поиск с помощью регулярных выражений.

Это позволяет запрашивать точное совпадение со строкой или поиск строки при вызове функции, которая ожидает регулярное выражение.

(regexp-quote "^The cat$")
     ⇒ "\\^The cat\\$"

Один из способов использования regexp-quote — объединить точное совпадение со строкой и контекст, заданный как регулярное выражение. Например, этот код ищет строку, значение которой равно string, окружённую пробельными символами:

(re-search-forward
 (concat "\\s-" (regexp-quote string) "\\s-"))

Возвращённая строка может совпадать с самой string, если она не содержит специальных символов.

Функция: regexp-opt strings &optional paren

Эта функция возвращает эффективное регулярное выражение, соответствующее любой из строк в списке strings. Это полезно, когда необходимо сделать сопоставление или поиск максимально быстрым — например, в режиме Font Lock.

Если strings — пустой список, возвращаемое значение представляет собой регулярное выражение, которое никогда ни с чем не совпадает.

Необязательный аргумент paren может принимать одно из следующих значений:

строка

Перед результирующим регулярным выражением добавляется paren, а после него — ‘\)’. Например, используйте ‘"\\(?1:"’, чтобы создать группу с явно заданным номером.

words

Результирующее регулярное выражение заключается между ‘\<\(’ и ‘\)\>’.

symbols

Результирующее регулярное выражение заключается между ‘\_<\(’ и ‘\)\_>’ (это часто подходит для сопоставления ключевых слов языков программирования и подобных элементов).

не-nil

Результирующее регулярное выражение заключается между ‘\(’ и ‘\)’.

nil

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

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

Если не учитывать переупорядочивание, результирующее регулярное выражение regexp-opt эквивалентно, но обычно эффективнее упрощённой версии:

(defun simplified-regexp-opt (strings &optional paren)
 (let ((parens
        (cond
         ((stringp paren)       (cons paren "\\)"))
         ((eq paren 'words)    '("\\<\\(" . "\\)\\>"))
         ((eq paren 'symbols) '("\\_<\\(" . "\\)\\_>"))
         ((null paren)          '("\\(?:" . "\\)"))
         (t                       '("\\(" . "\\)")))))
   (concat (car parens)
           (mapconcat 'regexp-quote strings "\\|")
           (cdr parens))))
Функция: regexp-opt-depth regexp

Эта функция возвращает общее число группирующих конструкций (выражений в скобках) в regexp. Сюда не входят не захватывающие группы (см. Конструкции с обратной косой чертой в регулярных выражениях).

Функция: regexp-opt-charset chars

Эта функция возвращает регулярное выражение, соответствующее символу из списка символов chars.

(regexp-opt-charset '(?a ?b ?c ?d ?e))
     ⇒ "[a-e]"
Переменная: regexp-unmatchable

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

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

Spec-Zone.ru

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