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, где 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,
в текущем глобальном окружении.