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