Spec-Zone.ru › Elisp

Структурированная нотация регулярных выражений 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 или при настройке переменных.

  • Конструкции в регулярных выражениях rx
  • Функции и макросы, использующие регулярные выражения rx
  • Определение новых форм rx

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

Spec-Zone.ru

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