RE2 regular expression syntax reference

This page lists the regular expression syntax accepted by RE2.
It also lists syntax accepted by PCRE, PERL, and VIM.
Grayed out expressions are not supported by RE2.
Single characters:
.any character, possibly including newline (s=true)
[xyz]character class
[^xyz]negated character class
\dPerl character class
\Dnegated Perl character class
[[:alpha:]]ASCII character class
[[:^alpha:]]negated ASCII character class
\pNUnicode character class (one-letter name)
\p{Greek}Unicode character class
\PNnegated Unicode character class (one-letter name)
\P{Greek}negated Unicode character class
Composites:
xyx followed by y
x|yx or y (prefer x)
Repetitions:
x*zero or more x, prefer more
x+one or more x, prefer more
x?zero or one x, prefer one
x{n,m}n or n+1 or ... or m x, prefer more
x{n,}n or more x, prefer more
x{n}exactly n x
x*?zero or more x, prefer fewer
x+?one or more x, prefer fewer
x??zero or one x, prefer zero
x{n,m}?n or n+1 or ... or m x, prefer fewer
x{n,}?n or more x, prefer fewer
x{n}?exactly n x
x{}(≡ x*) VIM
x{-}(≡ x*?) VIM
x{-n}(≡ x{n}?) VIM
x=(≡ x?) VIM
Implementation restriction: The counting forms x{n,m}, x{n,}, and x{n}
reject forms that create a minimum or maximum repetition count above 1000.
Unlimited repetitions are not subject to this restriction.
Possessive repetitions:
x*+zero or more x, possessive
x++one or more x, possessive
x?+zero or one x, possessive
x{n,m}+n or ... or m x, possessive
x{n,}+n or more x, possessive
x{n}+exactly n x, possessive
Grouping:
(re)numbered capturing group (submatch)
(?P<name>re)named & numbered capturing group (submatch)
(?<name>re)named & numbered capturing group (submatch)
(?'name're)named & numbered capturing group (submatch)
(?:re)non-capturing group
(?flags)set flags within current group; non-capturing
(?flags:re)set flags during re; non-capturing
(?#text)comment
(?|x|y|z)branch numbering reset
(?>re)possessive match of re
re@>possessive match of re VIM
%(re)non-capturing group VIM
Flags:
icase-insensitive (default false)
mmulti-line mode: ^ and $ match begin/end line in addition to begin/end text (default false)
slet . match \n (default false)
Uungreedy: swap meaning of x* and x*?, x+ and x+?, etc (default false)
Flag syntax is xyz (set) or -xyz (clear) or xy-z (set xy, clear z).
Empty strings:
^at beginning of text or line (m=true)
$at end of text (like \z not \Z) or line (m=true)
\Aat beginning of text
\bat ASCII word boundary (\w on one side and \W, \A, or \z on the other)
\Bnot at ASCII word boundary
\Gat beginning of subtext being searched PCRE
\Gat end of last match PERL
\Zat end of text, or before newline at end of text
\zat end of text
(?=re)before text matching re
(?!re)before text not matching re
(?<=re)after text matching re
(?<!re)after text not matching re
re&before text matching re VIM
re@=before text matching re VIM
re@!before text not matching re VIM
re@<=after text matching re VIM
re@<!after text not matching re VIM
\zssets start of match (= \K) VIM
\zesets end of match VIM
\%^beginning of file VIM
\%$end of file VIM
\%Von screen VIM
\%#cursor position VIM
\%'mmark m position VIM
\%23lin line 23 VIM
\%23cin column 23 VIM
\%23vin virtual column 23 VIM
Escape sequences:
\abell (≡ \007)
\fform feed (≡ \014)
\thorizontal tab (≡ \011)
\nnewline (≡ \012)
\rcarriage return (≡ \015)
\vvertical tab character (≡ \013)
\*literal *, for any punctuation character *
\123octal character code (up to three digits)
\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
\bbackspace (use \010)
\cKcontrol char ^K (use \001 etc)
\eescape (use \033)
\g1backreference
\g{1}backreference
\g{+1}backreference
\g{-1}backreference
\g{name}named backreference
\g<name>subroutine call
\g'name'subroutine call
\k<name>named backreference
\k'name'named backreference
\lXlowercase X
\uxuppercase x
\L...\Elowercase text ...
\Kreset beginning of $0
\N{name}named Unicode character
\Rline break
\U...\Eupper case text ...
\Xextended Unicode sequence
\%d123decimal character 123 VIM
\%xFFhex character FF VIM
\%o123octal character 123 VIM
\%u1234Unicode character 0x1234 VIM
\%U12345678Unicode character 0x12345678 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
\Hnot horizontal space
\vvertical space
\Vnot vertical space
ASCII character classes:
[[:alnum:]]alphanumeric (≡ [0-9A-Za-z])
[[:alpha:]]alphabetic (≡ [A-Za-z])
[[:ascii:]]ASCII (≡ [\x00-\x7F])
[[:blank:]]blank (≡ [\t ])
[[:cntrl:]]control (≡ [\x00-\x1F\x7F])
[[:digit:]]digits (≡ [0-9])
[[:graph:]]graphical (≡ [!-~] == [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]]lower case (≡ [a-z])
[[:print:]]printable (≡ [ -~] == [ [:graph:]])
[[:punct:]]punctuation (≡ [!-/:-@[-`{-~])
[[:space:]]whitespace (≡ [\t\n\v\f\r ])
[[:upper:]]upper case (≡ [A-Z])
[[:word:]]word characters (≡ [0-9A-Za-z_])
[[:xdigit:]]hex digit (≡ [0-9A-Fa-f])
Unicode character class names--general category:
Cother
Cccontrol
Cfformat
Cnunassigned code points
Coprivate use
Cssurrogate
Lletter
LCcased letter
L&cased letter
Lllowercase letter
Lmmodifier letter
Loother letter
Lttitlecase letter
Luuppercase letter
Mmark
Mcspacing mark
Meenclosing mark
Mnnon-spacing mark
Nnumber
Nddecimal number
Nlletter number
Noother number
Ppunctuation
Pcconnector punctuation
Pddash punctuation
Peclose punctuation
Pffinal punctuation
Piinitial punctuation
Poother punctuation
Psopen punctuation
Ssymbol
Sccurrency symbol
Skmodifier symbol
Smmath symbol
Soother symbol
Zseparator
Zlline separator
Zpparagraph separator
Zsspace separator
Unicode character class names--scripts:
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
Cypro_Minoan
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
Old_Uyghur
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
Tangsa
Tangut
Telugu
Thaana
Thai
Tibetan
Tifinagh
Tirhuta
Toto
Ugaritic
Vai
Vithkuqi
Wancho
Warang_Citi
Yezidi
Yi
Zanabazar_Square
Vim character classes:
\iidentifier character VIM
\I\i except digits VIM
\kkeyword character VIM
\K\k except digits VIM
\ffile name character VIM
\F\f except digits VIM
\pprintable character VIM
\P\p except digits VIM
\swhitespace character (≡ [ \t]) VIM
\Snon-white space character (≡ [^ \t]) VIM
\ddigits (≡ [0-9]) VIM
\Dnot \d VIM
\xhex digits (≡ [0-9A-Fa-f]) VIM
\Xnot \x VIM
\ooctal digits (≡ [0-7]) VIM
\Onot \o VIM
\wword character VIM
\Wnot \w VIM
\hhead of word character VIM
\Hnot \h VIM
\aalphabetic VIM
\Anot \a VIM
\llowercase VIM
\Lnot lowercase VIM
\uuppercase VIM
\Unot uppercase VIM
\_x\x plus newline, for any x VIM
Vim flags:
\cignore case VIM
\Cmatch case VIM
\mmagic VIM
\Mnomagic VIM
\vverymagic VIM
\Vverynomagic VIM
\Zignore differences in Unicode combining characters VIM
Magic:
(?{code})arbitrary Perl code PERL
(??{code})postponed arbitrary Perl code PERL
(?n)recursive call to regexp capturing group n
(?+n)recursive call to relative group +n
(?-n)recursive call to relative group -n
(?C)PCRE callout PCRE
(?R)recursive call to entire regexp (≡ (?0))
(?&name)recursive call to named group
(?P=name)named backreference
(?P>name)recursive call to named group
(?(cond)true|false)conditional branch
(?(cond)true)conditional branch
(*ACCEPT)make regexps more like Prolog
(*COMMIT)
(*F)
(*FAIL)
(*MARK)
(*PRUNE)
(*SKIP)
(*THEN)
(*ANY)set newline convention
(*ANYCRLF)
(*CR)
(*CRLF)
(*LF)
(*BSR_ANYCRLF)set \R convention PCRE
(*BSR_UNICODE) PCRE