Структурированная нотация регулярных выражений rx
В качестве альтернативы синтаксису на основе строк Emacs предоставляет структурированную нотацию rx на основе S-выражений Lisp. Эту нотацию обычно проще читать, записывать и поддерживать, чем строки регулярных выражений; её также можно свободно форматировать с отступами и снабжать комментариями. Поскольку функции для работы с регулярными выражениями ожидают строковый формат, нотацию необходимо преобразовать в строку, но обычно это преобразование выполняется во время байт-компиляции, а не при запуске кода Lisp, использующего регулярное выражение.
Вот регулярное выражение rx, которое соответствует блочному комментарию в языке программирования C:
(rx "/*" ; Initial /*
(zero-or-more
(or (not "*") ; Either non-*,
(seq (one-or-more "*") ; or some * followed by
(not (or "*" "/"))))) ; neither * nor /
(one-or-more "*") ; At least one star,
"/") ; and the final /
или, с использованием более коротких синонимов и в более компактной записи,
(rx "/*"
(* (| (not "*")
(: (+ "*") (not (in "*/")))))
(+ "*") "/")
В традиционном строковом синтаксисе оно записывалось бы так:
"/\\*\\(?:[^*]\\|\\*+[^*/]\\)*\\*+/"
Нотация rx полезна главным образом в коде Lisp; её нельзя использовать в большинстве интерактивных ситуаций, когда запрашивается регулярное выражение, например при запуске query-replace-regexp или при настройке переменных.
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/Rx-Notation.html