Эти функции работают с регулярными выражениями.
Эта функция возвращает регулярное выражение, единственным точным совпадением которого является
string. Использование этого регулярного выражения в looking-at сработает только в том случае, если следующие символы в буфере — это string; использование его в функции поиска сработает, если искомый текст содержит string. См. Поиск с помощью регулярных выражений.
Это позволяет запросить точное совпадение строки или поиск при вызове функции, которая ожидает регулярное выражение.
(regexp-quote "^The cat$")
⇒ "\\^The cat\\$"
Одно из применений regexp-quote — объединение точного совпадения строки с контекстом, описанным как регулярное выражение. Например, это ищет строку, являющуюся значением string, окруженную пробелами:
(re-search-forward (concat "\\s-" (regexp-quote string) "\\s-"))
Возвращаемая строка может быть самой string, если она не содержит специальных символов.
Эта функция возвращает эффективное регулярное выражение, которое совпадет с любым из строк в списке strings. Это полезно, когда вам необходимо сделать сопоставление или поиск максимально быстрым — например, для режима Font Lock28.
Если 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. Это не включает слабые группы (см. Конструкции с обратным слэшем в регулярных выражениях).
Эта функция возвращает регулярное выражение, соответствующее символу из списка символов chars.
(regexp-opt-charset '(?a ?b ?c ?d ?e))
⇒ "[a-e]"
Эта переменная содержит регулярное выражение, которое гарантированно не совпадет ни с какой строкой. Она особенно полезна в качестве значения по умолчанию для переменных, которые могут быть установлены на шаблон, который на самом деле что-то совпадает.
Обратите внимание, что regexp-opt не гарантирует, что его результат является абсолютно самой эффективной формой. Ручное настраиваемое регулярное выражение иногда может быть немного эффективнее, но почти никогда не стоит усилий.