Регулярные выражения — это обозначения для описания наборов символьных строк. Когда конкретная строка входит в набор, описываемый регулярным выражением, мы часто говорим, что регулярное выражение соответствует строке.
Самое простое регулярное выражение — это один буквальный символ. За исключением таких метасимволов, как *+?()|
, символы соответствуют друг другу. Чтобы сопоставить метасимвол, экранируйте его обратной косой чертой: \+
соответствует буквальному символу плюса.
Два регулярных выражения можно чередовать или объединять, чтобы сформировать новое регулярное выражение: если e 1 соответствует s, а e 2 соответствует t , то e 1 |
e 2 соответствует s или t , а e 1 e 2 соответствует st .
Метасимволы *
, +
и ?
являются операторами повторения: e 1*
соответствует последовательности из нуля или более (возможно, разных) строк, каждая из которых соответствует e 1 ; e 1+
соответствует одному или нескольким; e 1?
соответствует нулю или единице.
Приоритет операторов, от самого слабого до самого сильного связывания, — это сначала чередование, затем конкатенация и, наконец, операторы повторения. Явные круглые скобки могут использоваться для обозначения разных значений, как и в арифметических выражениях. Некоторые примеры: ab|cd
эквивалентно (ab)|(cd)
; ab*
эквивалентно a(b*)
.
Синтаксис, описанный до сих пор, является большей частью традиционного синтаксиса регулярных выражений egrep Unix . Этого подмножества достаточно для описания всех обычных языков: грубо говоря, обычный язык — это набор строк, которые могут быть сопоставлены за один проход по тексту, используя только фиксированный объем памяти. Новые средства регулярных выражений (особенно Perl и те, которые его скопировали) добавили много новых операторов и управляющих последовательностей, которые делают регулярные выражения более краткими, а иногда и более загадочными, но обычно не более мощными.
На этой странице перечислены синтаксисы регулярных выражений, принятые RE2.
В нем также перечислены некоторые синтаксисы, принятые PCRE, PERL и VIM.
виды односимвольных выражений | Примеры |
---|---|
любой символ, возможно, включая новую строку (s = true) | . |
класс персонажа | [xyz] |
отрицательный класс символов | [^xyz] |
Класс символов Perl | \d |
инвертированный класс символов Perl | \D |
Класс символов ASCII | [[:alpha:]] |
отрицательный класс символов ASCII | [[:^alpha:]] |
Класс символов Unicode (однобуквенное имя) | \pN |
Класс символов Юникода | \p{Greek} |
отрицательный класс символов Unicode (однобуквенное имя) | \PN |
отрицательный класс символов Unicode | \P{Greek} |
Композиты | |
---|---|
xy | x с последующим y |
x|y | x или y (предпочитаю x ) |
Повторы | |
---|---|
x* | ноль или больше x , предпочитаю больше |
x+ | один или несколько x , предпочитаю больше |
x? | ноль или один x , предпочитаю один |
x{n,m} | n или n +1 или … или m x , предпочитаю больше |
x{n,} | n или больше x , предпочитаю больше |
x{n} | точно n x |
x*? | ноль или больше x , предпочитаю меньше |
x+? | один или несколько x , предпочитаю меньше |
x?? | ноль или один x , предпочитаю ноль |
x{n,m}? | n или n +1 или … или m x , предпочтительнее, меньше |
x{n,}? | n или больше x , предпочитаю меньше |
x{n}? | точно n x |
x{} | (≡ x* ) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
x{-} | (≡ x*? ) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
x{-n} | (≡ x{n}? ) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
x= | (≡ x? ) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
Ограничение реализации: Формы подсчета x{n,m}
, x{n,}
и x{n}
отвергают формы , которые создают минимальное или максимальное количество повторений выше 1000. Неограниченные повторов не подлежат это ограничение.
Притяжательные повторения | |
---|---|
x*+ | ноль или более x , притяжательный (НЕ ПОДДЕРЖИВАЕТСЯ) |
x++ | один или несколько x притяжательных (НЕ ПОДДЕРЖИВАЕТСЯ) |
x?+ | ноль или один x притяжательный (НЕ ПОДДЕРЖИВАЕТСЯ) |
x{n,m}+ | n или … или m x притяжательный (НЕ ПОДДЕРЖИВАЕТСЯ) |
x{n,}+ | n или более x притяжательный (НЕ ПОДДЕРЖИВАЕТСЯ) |
x{n}+ | точно n x , притяжательные (не поддерживается) |
Группировка | |
---|---|
(re) | пронумерованная группа захвата (подматч) |
(?P<name>re) | именованная и пронумерованная группа захвата (подсовпадение) |
(?<name>re) | именованная и пронумерованная группа захвата (подсовпадение) (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?'name're) | именованная и пронумерованная группа захвата (подсовпадение) (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?:re) | группа без захвата |
(?flags) | установить флаги в текущей группе; не захватывающий |
(?flags:re) | установить флаги во время перезарядки; не захватывающий |
(?#text) | комментарий (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?|x|y|z) | сброс нумерации веток (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?>re) | притяжательное совпадение re (НЕ ПОДДЕРЖИВАЕТСЯ) |
re@> | притяжательное совпадение re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
%(re) | группа без захвата (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
Флаги | |
---|---|
i | без учета регистра (по умолчанию false) |
m | многострочный режим: ^ и $ соответствие начальной / конечной строке в дополнение к начальному / конечному тексту (по умолчанию false) |
s | разрешить . совпадение \n (по умолчанию false) |
U | ungreedy: поменять местами значения x* и x*? , x+ и и x+? т. д. (по умолчанию false) |
Синтаксис флага: xyz
(установить) или -xyz
(очистить) или xy-z
(установить xy
, очистить z
).
Пустые строки | |
---|---|
^ | в начале текста или строки ( m = true) |
$ | в конце текста (например, \z нет \Z ) или строки ( m = истина) |
\A | в начале текста |
\b | на ASCII границе слова ( \w с одной стороны , и \W , \A или \z с другой стороны ) |
\B | не на границе слова ASCII |
\g | в начале поискового подтекста (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE |
\G | в конце последнего матча (НЕ ПОДДЕРЖИВАЕТСЯ) PERL |
\Z | в конце текста или перед новой строкой в конце текста (НЕ ПОДДЕРЖИВАЕТСЯ) |
\z | в конце текста |
(?=re) | до сопоставления текста re (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?!re) | перед несоответствием текста re (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?<=re) | после сопоставления текста re (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?<!re) | после несоответствия текста re (НЕ ПОДДЕРЖИВАЕТСЯ) |
re& | до сопоставления текста re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
re@= | до сопоставления текста re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
re@! | перед текстом не соответствует re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
re@<= | после сопоставления текста re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
re@<! | после текста не соответствует re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\zs | устанавливает начало совпадения (= \ K) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\ze | устанавливает конец матча (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%^ | начало файла (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%$ | конец файла (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%V | на экране (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%# | положение курсора (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%'m | m положение отметки (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%23l | в строке 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%23c | в столбце 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%23v | в виртуальном столбце 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
Последовательности выхода | |
---|---|
\a | колокольчик (≡ \007 ) |
\f | подача формы (≡ \014 ) |
\t | горизонтальная табуляция (≡ \011 ) |
\n | новая строка (≡ \012 ) |
\r | возврат каретки (≡ \015 ) |
\v | символ вертикальной табуляции (≡ \013 ) |
\* | буквальный * , для любого символа пунктуации* |
\123 | восьмеричный символьный код (до трех цифр) |
\x7F | hex character code (exactly two digits) |
\x{10FFFF} | hex character code |
\C | match a single byte even in UTF-8 mode |
\Q...\E | literal text ... even if ... has punctuation |
\1 | backreference (NOT SUPPORTED) |
\b | backspace (NOT SUPPORTED) (use \010 ) |
\cK | control char ^K (NOT SUPPORTED) (use \001 etc) |
\e | escape (NOT SUPPORTED) (use \033 ) |
\g1 | backreference (NOT SUPPORTED) |
\g{1} | backreference (NOT SUPPORTED) |
\g{+1} | backreference (NOT SUPPORTED) |
\g{-1} | backreference (NOT SUPPORTED) |
\g{name} | named backreference (NOT SUPPORTED) |
\g<name> | subroutine call (NOT SUPPORTED) |
\g'name' | subroutine call (NOT SUPPORTED) |
\k<name> | named backreference (NOT SUPPORTED) |
\k'name' | named backreference (NOT SUPPORTED) |
\lX | lowercase X (NOT SUPPORTED) |
\ux | uppercase x (NOT SUPPORTED) |
\L...\E | lowercase text ... (NOT SUPPORTED) |
\K | reset beginning of $0 (NOT SUPPORTED) |
\N{name} | named Unicode character (NOT SUPPORTED) |
\R | line break (NOT SUPPORTED) |
\U...\E | upper case text ... (NOT SUPPORTED) |
\X | extended Unicode sequence (NOT SUPPORTED) |
\%d123 | decimal character 123 (NOT SUPPORTED) VIM |
\%xFF | hex character FF (NOT SUPPORTED) VIM |
\%o123 | octal character 123 (NOT SUPPORTED) VIM |
\%u1234 | Unicode character 0x1234 (NOT SUPPORTED) VIM |
\%U12345678 | Unicode character 0x12345678 (NOT SUPPORTED) VIM |
Character class elements | |
---|---|
x | single character |
A-Z | character range (inclusive) |
\d | Perl character class |
[:foo:] | ASCII character class foo |
\p{Foo} | Unicode character class Foo |
\pF | Unicode character class F (one-letter name) |
Named character classes as character class elements | |
---|---|
[\d] | digits (≡ \d ) |
[^\d] | not digits (≡ \D ) |
[\D] | not digits (≡ \D ) |
[^\D] | not not digits (≡ \d ) |
[[:name:]] | named ASCII class inside character class (≡ [:name:] ) |
[^[:name:]] | named ASCII class inside negated character class (≡ [:^name:] ) |
[\p{Name}] | named Unicode property inside character class (≡ \p{Name} ) |
[^\p{Name}] | named Unicode property inside negated character class (≡ \P{Name} ) |
Perl character classes (all ASCII-only) | |
---|---|
\d | digits (≡ [0-9] ) |
\D | not digits (≡ [^0-9] ) |
\s | whitespace (≡ [\t\n\f\r ] ) |
\S | not whitespace (≡ [^\t\n\f\r ] ) |
\w | word characters (≡ [0-9A-Za-z_] ) |
\W | not word characters (≡ [^0-9A-Za-z_] ) |
\h | horizontal space (NOT SUPPORTED) |
\H | not horizontal space (NOT SUPPORTED) |
\v | vertical space (NOT SUPPORTED) |
\V | not vertical space (NOT SUPPORTED) |
Классы символов ASCII | |
---|---|
[[:alnum:]] | буквенно-цифровой (≡ [0-9A-Za-z] ) |
[[:alpha:]] | алфавитный (≡ [A-Za-z] ) |
[[:ascii:]] | ASCII (≡ [\x00-\x7F] ) |
[[:blank:]] | пустой (≡ [\t ] ) |
[[:cntrl:]] | контроль (≡ [\x00-\x1F\x7F] ) |
[[:digit:]] | цифры (≡ [0-9] ) |
[[:graph:]] | графический (≡ [!-~] ≡ [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_ ` {|}~] ) |
[[:lower:]] | нижний регистр (≡ [a-z] ) |
[[:print:]] | для печати (≡ [ -~] ≡ [ [:graph:]] ) |
[[:punct:]] | пунктуация (≡ [!-/:-@[- ` {-~] ) |
[[:space:]] | пробел (≡ [\t\n\v\f\r ] ) |
[[:upper:]] | верхний регистр (≡ [A-Z] ) |
[[:word:]] | словесные символы (≡ [0-9A-Za-z_] ) |
[[:xdigit:]] | шестнадцатеричная цифра (≡ [0-9A-Fa-f] ) |
Имена классов символов Unicode — общая категория | |
---|---|
C | Другой |
Cc | контроль |
Cf | формат |
Cn | неназначенные кодовые точки (НЕ ПОДДЕРЖИВАЮТСЯ) |
Co | частное использование |
Cs | суррогат |
L | письмо |
LC | прописное письмо (НЕ ПОДДЕРЖИВАЕТСЯ) |
L& | прописное письмо (НЕ ПОДДЕРЖИВАЕТСЯ) |
Ll | строчная буква |
Lm | буква-модификатор |
Lo | другое письмо |
Lt | заглавная буква |
Lu | прописная буква |
M | отметка |
Mc | метка интервала |
Me | заключительный знак |
Mn | знак без интервала |
N | номер |
Nd | десятичное число |
Nl | буквенный номер |
No | другой номер |
P | пунктуация |
Pc | пунктуация соединителя |
Pd | пунктуация тире |
Pe | закрытая пунктуация |
Pf | последняя пунктуация |
Pi | начальная пунктуация |
Po | другая пунктуация |
Ps | открытая пунктуация |
S | символ |
Sc | символ валюты |
Sk | символ-модификатор |
Sm | математический символ |
So | другой символ |
Z | разделитель |
Zl | разделитель строк |
Zp | разделитель абзацев |
Zs | разделитель пробелов |
Имена классов символов Unicode — скрипты |
---|
Adlam |
Ahom |
Anatolian_Hieroglyphs |
Arabic |
Armenian |
Avestan |
Balinese |
Bamum |
Bassa_Vah |
Batak |
Bengali |
Bhaiksuki |
Bopomofo |
Brahmi |
Braille |
Buginese |
Buhid |
Canadian_Aboriginal |
Carian |
Caucasian_Albanian |
Chakma |
Cham |
Cherokee |
Chorasmian |
Common |
Coptic |
Cuneiform |
Cypriot |
Cyrillic |
Deseret |
Devanagari |
Dives_Akuru |
Dogra |
Duployan |
Egyptian_Hieroglyphs |
Elbasan |
Elymaic |
Ethiopic |
Georgian |
Glagolitic |
Gothic |
Grantha |
Greek |
Gujarati |
Gunjala_Gondi |
Gurmukhi |
Han |
Hangul |
Hanifi_Rohingya |
Hanunoo |
Hatran |
Hebrew |
Hiragana |
Imperial_Aramaic |
Inherited |
Inscriptional_Pahlavi |
Inscriptional_Parthian |
Javanese |
Kaithi |
Kannada |
Katakana |
Kayah_Li |
Kharoshthi |
Khitan_Small_Script |
Khmer |
Khojki |
Khudawadi |
Lao |
Latin |
Lepcha |
Limbu |
Linear_A |
Linear_B |
Lisu |
Lycian |
Lydian |
Mahajani |
Makasar |
Malayalam |
Mandaic |
Manichaean |
Marchen |
Masaram_Gondi |
Medefaidrin |
Meetei_Mayek |
Mende_Kikakui |
Meroitic_Cursive |
Meroitic_Hieroglyphs |
Miao |
Modi |
Mongolian |
Mro |
Multani |
Myanmar |
Nabataean |
Nandinagari |
New_Tai_Lue |
Newa |
Nko |
Nushu |
Nyiakeng_Puachue_Hmong |
Ogham |
Ol_Chiki |
Old_Hungarian |
Old_Italic |
Old_North_Arabian |
Old_Permic |
Old_Persian |
Old_Sogdian |
Old_South_Arabian |
Old_Turkic |
Oriya |
Osage |
Osmanya |
Pahawh_Hmong |
Palmyrene |
Pau_Cin_Hau |
Phags_Pa |
Phoenician |
Psalter_Pahlavi |
Rejang |
Runic |
Samaritan |
Saurashtra |
Sharada |
Shavian |
Siddham |
SignWriting |
Sinhala |
Sogdian |
Sora_Sompeng |
Soyombo |
Sundanese |
Syloti_Nagri |
Syriac |
Tagalog |
Tagbanwa |
Tai_Le |
Tai_Tham |
Tai_Viet |
Takri |
Tamil |
Tangut |
Telugu |
Thaana |
Thai |
Tibetan |
Tifinagh |
Tirhuta |
Ugaritic |
Vai |
Wancho |
Warang_Citi |
Yezidi |
Yi |
Zanabazar_Square |
Классы персонажей Vim | |
---|---|
\i | символ идентификатора (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\I | \i кроме цифр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\k | символ ключевого слова (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\K | \k кроме цифр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\f | символ имени файла (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\F | \f кроме цифр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\p | печатный символ (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\P | \p кроме цифр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\s | пробельный символ (≡ [ \t] ) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\S | non-white space character (≡ [^ \t] ) (NOT SUPPORTED) VIM |
\d | digits (≡ [0-9] ) VIM |
\D | not \d VIM |
\x | hex digits (≡ [0-9A-Fa-f] ) (NOT SUPPORTED) VIM |
\X | not \x (NOT SUPPORTED) VIM |
\o | octal digits (≡ [0-7] ) (NOT SUPPORTED) VIM |
\O | not \o (NOT SUPPORTED) VIM |
\w | word character VIM |
\W | not \w VIM |
\h | head of word character (NOT SUPPORTED) VIM |
\H | not \h (NOT SUPPORTED) VIM |
\a | alphabetic (NOT SUPPORTED) VIM |
\A | not \a (NOT SUPPORTED) VIM |
\l | lowercase (NOT SUPPORTED) VIM |
\L | not lowercase (NOT SUPPORTED) VIM |
\u | uppercase (NOT SUPPORTED) VIM |
\U | not uppercase (NOT SUPPORTED) VIM |
\_x | \x plus newline, for any x (NOT SUPPORTED) VIM |
\c | ignore case (NOT SUPPORTED) VIM |
\C | match case (NOT SUPPORTED) VIM |
\m | magic (NOT SUPPORTED) VIM |
\M | nomagic (NOT SUPPORTED) VIM |
\v | verymagic (NOT SUPPORTED) VIM |
\V | verynomagic (NOT SUPPORTED) VIM |
\Z | ignore differences in Unicode combining characters (NOT SUPPORTED) VIM |
Magic | |
---|---|
(?{code}) | произвольный код Perl (НЕ ПОДДЕРЖИВАЕТСЯ) PERL |
(??{code}) | отложенный произвольный код Perl (НЕ ПОДДЕРЖИВАЕТСЯ) PERL |
(?n) | рекурсивный вызов группы захвата регулярных выражений n (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?+n) | рекурсивный вызов относительной группы +n (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?-n) | рекурсивный вызов относительной группы -n (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?C) | Выноска PCRE (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE |
(?R) | рекурсивный вызов всего регулярного выражения (≡ (?0) ) (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?&name) | рекурсивный вызов названной группы (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?P=name) | именованная обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?P>name) | рекурсивный вызов названной группы (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?(cond)true|false) | условная ветвь (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?(cond)true) | условная ветвь (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*ACCEPT) | сделать регулярные выражения более похожими на Prolog (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*COMMIT) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*F) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*FAIL) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*MARK) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*PRUNE) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*SKIP) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*THEN) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*ANY) | установить соглашение о новой строке (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*ANYCRLF) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*CR) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*CRLF) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*LF) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*BSR_ANYCRLF) | установить \ R соглашение (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE |
(*BSR_UNICODE) | (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE |