Конструкции в 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.wordwsymbol_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.consonant0base-vowel1upper-diacritical-mark2lower-diacritical-mark3tone-mark4symbol5digit6vowel-modifying-diacritical-mark7vowel-sign8semivowel-lower9not-at-end-of-line<not-at-beginning-of-line>alpha-numeric-two-byteAchinese-two-byteCgreek-two-byteGjapanese-hiragana-two-byteHindian-two-byteIjapanese-katakana-two-byteKstrong-left-to-rightLkorean-hangul-two-byteNstrong-right-to-leftRcyrillic-two-byteYcombining-diacritic^asciiaarabicbchinesecethiopicegreekgkoreanhindianijapanesejjapanese-katakanaklatinllaootibetanqjapanese-romanrthaitvietnamesevhebrewwcyrillicycan-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