Синтаксис регулярных выражений

Регулярные выражения — это обозначения для описания наборов символьных строк. Когда конкретная строка входит в набор, описываемый регулярным выражением, мы часто говорим, что регулярное выражение соответствует строке.

Самое простое регулярное выражение — это один буквальный символ. За исключением таких метасимволов, как *+?()|, символы соответствуют друг другу. Чтобы сопоставить метасимвол, экранируйте его обратной косой чертой: \+ соответствует буквальному символу плюса.

Два регулярных выражения можно чередовать или объединять, чтобы сформировать новое регулярное выражение: если 1 соответствует s, а 2 соответствует t , то |2 соответствует s или t , а 2 соответствует st .

Метасимволы *+и ? являются операторами повторения: 1* соответствует последовательности из нуля или более (возможно, разных) строк, каждая из которых соответствует 1 ; 1+ соответствует одному или нескольким; 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}
Композиты
xyx с последующим y
x|yxили 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)
Uungreedy: поменять местами значения 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
\%'mmположение отметки (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\%23lв строке 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\%23cв столбце 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\%23vв виртуальном столбце 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
Последовательности выхода
\aколокольчик (≡ \007)
\fподача формы (≡ \014)
\tгоризонтальная табуляция (≡ \011)
\nновая строка (≡ \012)
\rвозврат каретки (≡ \015)
\vсимвол вертикальной табуляции (≡ \013)
\*буквальный *, для любого символа пунктуации*
\123восьмеричный символьный код (до трех цифр)
\x7Fhex character code (exactly two digits)
\x{10FFFF}hex character code
\Cmatch a single byte even in UTF-8 mode
\Q...\Eliteral text ... even if ... has punctuation
\1backreference (NOT SUPPORTED)
\bbackspace (NOT SUPPORTED) (use \010)
\cKcontrol char ^K (NOT SUPPORTED) (use \001 etc)
\eescape (NOT SUPPORTED) (use \033)
\g1backreference (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)
\lXlowercase X (NOT SUPPORTED)
\uxuppercase x (NOT SUPPORTED)
\L...\Elowercase text ... (NOT SUPPORTED)
\Kreset beginning of $0 (NOT SUPPORTED)
\N{name}named Unicode character (NOT SUPPORTED)
\Rline break (NOT SUPPORTED)
\U...\Eupper case text ... (NOT SUPPORTED)
\Xextended Unicode sequence (NOT SUPPORTED)
\%d123decimal character 123 (NOT SUPPORTED) VIM
\%xFFhex character FF (NOT SUPPORTED) VIM
\%o123octal character 123 (NOT SUPPORTED) VIM
\%u1234Unicode character 0x1234 (NOT SUPPORTED) VIM
\%U12345678Unicode character 0x12345678 (NOT SUPPORTED) VIM
Character class elements
xsingle character
A-Zcharacter range (inclusive)
\dPerl character class
[:foo:]ASCII character class foo
\p{Foo}Unicode character class Foo
\pFUnicode 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)
\ddigits (≡ [0-9])
\Dnot digits (≡ [^0-9])
\swhitespace (≡ [\t\n\f\r ])
\Snot whitespace (≡ [^\t\n\f\r ])
\wword characters (≡ [0-9A-Za-z_])
\Wnot word characters (≡ [^0-9A-Za-z_])
\hhorizontal space (NOT SUPPORTED)
\Hnot horizontal space (NOT SUPPORTED)
\vvertical space (NOT SUPPORTED)
\Vnot 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
\Snon-white space character (≡ [^ \t]) (NOT SUPPORTED) VIM
\ddigits (≡ [0-9]) VIM
\Dnot \d VIM
\xhex digits (≡ [0-9A-Fa-f]) (NOT SUPPORTED) VIM
\Xnot \x (NOT SUPPORTED) VIM
\ooctal digits (≡ [0-7]) (NOT SUPPORTED) VIM
\Onot \o (NOT SUPPORTED) VIM
\wword character VIM
\Wnot \w VIM
\hhead of word character (NOT SUPPORTED) VIM
\Hnot \h (NOT SUPPORTED) VIM
\aalphabetic (NOT SUPPORTED) VIM
\Anot \a (NOT SUPPORTED) VIM
\llowercase (NOT SUPPORTED) VIM
\Lnot lowercase (NOT SUPPORTED) VIM
\uuppercase (NOT SUPPORTED) VIM
\Unot uppercase (NOT SUPPORTED) VIM
\_x\x plus newline, for any x (NOT SUPPORTED) VIM
\cignore case (NOT SUPPORTED) VIM
\Cmatch case (NOT SUPPORTED) VIM
\mmagic (NOT SUPPORTED) VIM
\Mnomagic (NOT SUPPORTED) VIM
\vverymagic (NOT SUPPORTED) VIM
\Vverynomagic (NOT SUPPORTED) VIM
\Zignore 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

Добавить комментарий

Ваш адрес email не будет опубликован.

Scroll to top