Spec-Zone.ru › Elisp

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

Различные формы в rx регулярных выражениях описаны ниже. Краткая запись rx представляет собой любую rx форму, а rx… означает ноль или более rx форм. Все они являются допустимыми аргументами для 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", либо последовательность символов, как (?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 символ (но не сырые байты).

Соответствующий строковый регулярный выражение: ‘[[: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…)

Сопоставление с rxs, позволяя получить сопоставленный текст и позицию в данных совпадения. Первая группа в регулярном выражении имеет номер 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-2022 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