Spec-Zone.ru › Elisp

Обозначение 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

Spec-Zone.ru

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