Spec-Zone.ru › Elisp

Конструкции в регулярных выражениях rx

Ниже описаны различные формы в регулярных выражениях rx. Сокращение rx обозначает любую форму rx. rx… означает ноль или более форм rx и, если не указано иное, сопоставляет эти формы по порядку, как если бы они были заключены в подформу (seq …).

Все эти формы являются допустимыми аргументами макроса rx. Семантика всех форм определяется их описанием; соответствующие строковые регулярные выражения приведены только для наглядности. A, B, … обозначают (заключённые в соответствующие скобки) подвыражения строковых регулярных выражений.

Литералы

"some-string"

Буквально сопоставить строку «some-string». В отличие от строковых регулярных выражений, здесь нет символов со специальным значением.

?C

Буквально сопоставить символ «C».

Последовательность и альтернатива

(seq rx…)
(sequence rx…)
(: rx…)
(and rx…)

Сопоставить последовательность форм rx. Без аргументов выражение сопоставляет пустую строку. Соответствующее строковое регулярное выражение: «AB…» (подвыражения в последовательности).

(or rx…)
(| rx…)

Сопоставить ровно одну из форм rx. Если все аргументы — строки, символы или формы or с такими же ограничениями, всегда будет использоваться самое длинное возможное совпадение. В противном случае будет использовано либо самое длинное совпадение, либо первое (при просмотре слева направо). Без аргументов выражение не будет сопоставлять ничего. Соответствующее строковое регулярное выражение: «A\|B\|…».

unmatchable

Отказаться от любого сопоставления. Эквивалентно (or). См. regexp-unmatchable.

Повторение

Обычно формы повторения являются жадными: они пытаются сопоставить как можно больше повторений. Некоторые формы являются нежадными: они пытаются сопоставить как можно меньше повторений (см. Нежадное повторение).

(zero-or-more rx…)
(0+ rx…)

Сопоставить формы rx ноль или более раз. По умолчанию — жадное сопоставление. Соответствующее строковое регулярное выражение: «A*» (жадное), «A*?» (нежадное)

(one-or-more rx…)
(1+ rx…)

Сопоставить формы rx один или более раз. По умолчанию — жадное сопоставление. Соответствующее строковое регулярное выражение: «A+» (жадное), «A+?» (нежадное)

(zero-or-one rx…)
(optional rx…)
(opt rx…)

Сопоставить формы rx один раз или пустую строку. По умолчанию — жадное сопоставление. Соответствующее строковое регулярное выражение: «A?» (жадное), «A??» (нежадное).

(* rx…)

Сопоставить формы rx ноль или более раз. Жадное сопоставление. Соответствующее строковое регулярное выражение: «A*»

(+ rx…)

Сопоставить формы rx один или более раз. Жадное сопоставление. Соответствующее строковое регулярное выражение: «A+»

(? rx…)

Сопоставить формы rx один раз или пустую строку. Жадное сопоставление. Соответствующее строковое регулярное выражение: «A?»

(*? rx…)

Сопоставить формы rx ноль или более раз. Нежадное сопоставление. Соответствующее строковое регулярное выражение: «A*?»

(+? rx…)

Сопоставить формы rx один или более раз. Нежадное сопоставление. Соответствующее строковое регулярное выражение: «A+?»

(?? rx…)

Сопоставить формы rx или пустую строку. Нежадное сопоставление. Соответствующее строковое регулярное выражение: «A??»

(= n rx…)
(repeat n rx)

Сопоставить формы rx ровно n раз. Соответствующее строковое регулярное выражение: «A\{n\}»

(>= n rx…)

Сопоставить формы rx n или более раз. Жадное сопоставление. Соответствующее строковое регулярное выражение: «A\{n,\}»

(** n m rx…)
(repeat n m rx…)

Сопоставить формы rx не менее n, но не более m раз. Жадное сопоставление. Соответствующее строковое регулярное выражение: «A\{n,m\}»

Жадность некоторых форм повторения можно контролировать с помощью следующих конструкций. Однако, если требуется такое сопоставление, обычно лучше использовать приведённые выше явные нежадные формы.

(minimal-match rx)

Сопоставить rx, используя нежадное сопоставление для zero-or-more, 0+, one-or-more, 1+, zero-or-one, opt и optional.

(maximal-match rx)

Сопоставить rx, используя жадное сопоставление для zero-or-more, 0+, one-or-more, 1+, zero-or-one, opt и optional. Это поведение по умолчанию.

Сопоставление отдельных символов

(any set…)
(char set…)
(in set…)

Сопоставить один символ из одного из наборов set. Каждый set — это символ, строка, представляющая набор входящих в неё символов, диапазон или класс символов (см. ниже). Диапазон задаётся строкой с символами, разделёнными дефисом, например "A-Z", или cons-ячейкой из символов, например (?A . ?Z).

Обратите внимание, что дефис (-) в строках этой конструкции является специальным символом, поскольку он служит разделителем диапазона. Чтобы включить дефис, добавьте его как отдельный символ или строку из одного символа. Соответствующее строковое регулярное выражение: «[…]»

(not charspec)

Сопоставить символ, не входящий в charspec. charspec может быть символом, строкой из одного символа, формой any, not, or, intersection, syntax или category либо классом символов. Если charspec — форма or, её аргументы подчиняются тем же ограничениям, что и аргументы intersection; см. ниже. Соответствующие строковые регулярные выражения: «[^…]», «\Scode», «\Ccode»

(intersection charset…)

Сопоставить символ, входящий во все наборы символов charset. Каждый charset может быть символом, строкой из одного символа, формой any без классов символов либо формой intersection, or или not, аргументы которой также являются наборами символов charset.

not-newline, nonl

Сопоставить любой символ, кроме символа новой строки. Соответствующее строковое регулярное выражение: «.» (точка)

anychar, anything

Сопоставить любой символ. Например, соответствующее строковое регулярное выражение: «.\|\n»

класс символов

Сопоставить символ из именованного класса символов:

alpha, alphabetic, letter

Сопоставить буквы. Точнее, сопоставить символы, свойство Unicode «general-category» которых указывает, что они являются буквами.

alnum, alphanumeric

Сопоставить буквы и цифры. Точнее, сопоставить символы, свойство Unicode «general-category» которых указывает, что они являются буквами или десятичными цифрами.

digit, numeric, num

Сопоставить цифры от «0» до «9».

xdigit, hex-digit, hex

Сопоставить шестнадцатеричные цифры от «0» до «9», от «A» до «F» и от «a» до «f».

cntrl, control

Сопоставить любой символ с кодом в диапазоне 0–31.

blank

Сопоставить горизонтальный пробельный символ. Точнее, сопоставить символы, свойство Unicode «general-category» которых указывает, что они являются разделителями пробелов.

space, whitespace, white

Сопоставить любой символ, для которого задан синтаксис пробельного символа (см. Таблицу классов синтаксиса).

lower, lower-case

Сопоставить любой символ в нижнем регистре согласно текущей таблице регистра. Если case-fold-search не является nil, этот класс также сопоставляет любые буквы в верхнем регистре.

upper, upper-case

Сопоставить любой символ в верхнем регистре согласно текущей таблице регистра. Если case-fold-search не является nil, этот класс также сопоставляет любые буквы в нижнем регистре.

graph, graphic

Сопоставить любой символ, кроме пробельных символов, управляющих символов ASCII и не-ASCII, суррогатов и кодовых точек, не назначенных в Unicode согласно свойству Unicode «general-category».

print, printing

Сопоставить пробельный символ или символ, сопоставляемый формой graph.

punct, punctuation

Сопоставить любой знак пунктуации. (В настоящее время для многобайтовых символов — любой символ с синтаксисом, отличным от синтаксиса символа слова.)

word, wordchar

Сопоставить любой символ с синтаксисом символа слова (см. Таблицу классов синтаксиса).

ascii

Сопоставить любой символ ASCII (коды 0–127).

nonascii

Сопоставить любой символ не из ASCII (но не необработанный байт).

Классы space, word и punct используют таблицу синтаксиса текущего буфера, но не учитывают переопределяющие текстовые свойства синтаксиса (см. Свойства синтаксиса). Соответствующее строковое регулярное выражение: «[[:class:]]»

(syntax syntax)

Сопоставить символ с синтаксисом syntax, одним из следующих имен:

Имя синтаксиса Символ синтаксиса
whitespace -
punctuation .
word w
symbol _
open-parenthesis (
close-parenthesis )
expression-prefix '
string-quote "
paired-delimiter $
escape \
character-quote /
comment-start <
comment-end >
string-delimiter |
comment-delimiter !

Подробности см. в Таблице классов синтаксиса. Обратите внимание: (syntax punctuation) не эквивалентен классу символов punctuation. Соответствующее строковое регулярное выражение: «\schar», где char — символ синтаксиса.

(category category)

Сопоставить символ категории category, заданной одним из приведённых ниже имён или соответствующим символом категории.

Имя категории Символ категории
space-for-indent пробел
base .
consonant 0
base-vowel 1
upper-diacritical-mark 2
lower-diacritical-mark 3
tone-mark 4
symbol 5
digit 6
vowel-modifying-diacritical-mark 7
vowel-sign 8
semivowel-lower 9
not-at-end-of-line <
not-at-beginning-of-line >
alpha-numeric-two-byte A
chinese-two-byte C
greek-two-byte G
japanese-hiragana-two-byte H
indian-two-byte I
japanese-katakana-two-byte K
strong-left-to-right L
korean-hangul-two-byte N
strong-right-to-left R
cyrillic-two-byte Y
combining-diacritic ^
ascii a
arabic b
chinese c
ethiopic e
greek g
korean h
indian i
japanese j
japanese-katakana k
latin l
lao o
tibetan q
japanese-roman r
thai t
vietnamese v
hebrew w
cyrillic y
can-break |

Чтобы получить дополнительные сведения о категориях, определённых в данный момент, выполните команду M-x describe-categories RET. О том, как определять новые категории, см. Категории. Соответствующее строковое регулярное выражение: «\cchar», где char — символ категории.

Утверждения нулевой ширины

Все эти формы сопоставляют пустую строку, но только в определённых местах.

line-start, bol

Сопоставить в начале строки. Соответствующее строковое регулярное выражение: «^»

line-end, eol

Сопоставить в конце строки. Соответствующее строковое регулярное выражение: «$»

string-start, bos, buffer-start, bot

Сопоставить в начале сопоставляемой строки или буфера. Соответствующее строковое регулярное выражение: «\`»

string-end, eos, buffer-end, eot

Сопоставить в конце сопоставляемой строки или буфера. Соответствующее строковое регулярное выражение: «\'»

point

Сопоставить в точке. Соответствующее строковое регулярное выражение: «\=»

word-start, bow

Сопоставить в начале слова. Соответствующее строковое регулярное выражение: «\<»

word-end, eow

Сопоставить в конце слова. Соответствующее строковое регулярное выражение: «\>»

word-boundary

Сопоставить в начале или конце слова. Соответствующее строковое регулярное выражение: «\b»

not-word-boundary

Сопоставить в любом месте, кроме начала или конца слова. Соответствующее строковое регулярное выражение: «\B»

symbol-start

Сопоставить в начале символа. Соответствующее строковое регулярное выражение: «\_<»

symbol-end

Сопоставить в конце символа. Соответствующее строковое регулярное выражение: «\_>»

Группы захвата

(group rx…)
(submatch rx…)

Сопоставить формы rx, сделав сопоставленный текст и позицию доступными в данных сопоставления. Первая группа в регулярном выражении получает номер 1; каждой следующей группе присваивается номер на единицу больше наибольшего номера группы, уже использованного в шаблоне. Соответствующее строковое регулярное выражение: «\(…\)»

(group-n n rx…)
(submatch-n n rx…)

Как group, но номер группы n задаётся явно. n должен быть положительным. Соответствующее строковое регулярное выражение: «\(?n:…\)»

(backref n)

Сопоставить текст, ранее сопоставленный группой с номером n. n должен находиться в диапазоне 1–9. Соответствующее строковое регулярное выражение: «\n»

Динамическое включение

(literal expr)

Сопоставить буквальную строку, полученную в результате вычисления выражения Lisp expr. Вычисление выполняется во время вызова в текущем лексическом окружении.

(regexp expr)
(regex expr)

Сопоставить строковое регулярное выражение, полученное в результате вычисления выражения Lisp expr. Вычисление выполняется во время вызова в текущем лексическом окружении.

(eval expr)

Сопоставить форму rx, полученную в результате вычисления выражения Lisp expr. Вычисление выполняется во время раскрытия макроса для rx, во время вызова для rx-to-string, в текущем глобальном окружении.

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-Constructs.html

Spec-Zone.ru

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