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
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
(?P<name>re)named & numbered capturing group
(?<name>re)named & numbered capturing group
(?'name're)named & numbered capturing group
(?: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 word boundary (\w on one side and \W, \A, or \z on the other)
\Bnot a 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:
\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:
ArabicArabic
ArmenianArmenian
BalineseBalinese
BamumBamum
BatakBatak
BengaliBengali
BopomofoBopomofo
BrahmiBrahmi
BrailleBraille
BugineseBuginese
BuhidBuhid
Canadian_AboriginalCanadian Aboriginal
CarianCarian
ChakmaChakma
ChamCham
CherokeeCherokee
Commoncharacters not specific to one script
CopticCoptic
CuneiformCuneiform
CypriotCypriot
CyrillicCyrillic
DeseretDeseret
DevanagariDevanagari
Egyptian_HieroglyphsEgyptian Hieroglyphs
EthiopicEthiopic
GeorgianGeorgian
GlagoliticGlagolitic
GothicGothic
GreekGreek
GujaratiGujarati
GurmukhiGurmukhi
HanHan
HangulHangul
HanunooHanunoo
HebrewHebrew
HiraganaHiragana
Imperial_AramaicImperial Aramaic
Inheritedinherit script from previous character
Inscriptional_PahlaviInscriptional Pahlavi
Inscriptional_ParthianInscriptional Parthian
JavaneseJavanese
KaithiKaithi
KannadaKannada
KatakanaKatakana
Kayah_LiKayah Li
KharoshthiKharoshthi
KhmerKhmer
LaoLao
LatinLatin
LepchaLepcha
LimbuLimbu
Linear_BLinear B
LycianLycian
LydianLydian
MalayalamMalayalam
MandaicMandaic
Meetei_MayekMeetei Mayek
Meroitic_CursiveMeroitic Cursive
Meroitic_HieroglyphsMeroitic Hieroglyphs
MiaoMiao
MongolianMongolian
MyanmarMyanmar
New_Tai_LueNew Tai Lue (aka Simplified Tai Lue)
NkoNko
OghamOgham
Ol_ChikiOl Chiki
Old_ItalicOld Italic
Old_PersianOld Persian
Old_South_ArabianOld South Arabian
Old_TurkicOld Turkic
OriyaOriya
OsmanyaOsmanya
Phags_Pa'Phags Pa
PhoenicianPhoenician
RejangRejang
RunicRunic
SaurashtraSaurashtra
SharadaSharada
ShavianShavian
SinhalaSinhala
Sora_SompengSora Sompeng
SundaneseSundanese
Syloti_NagriSyloti Nagri
SyriacSyriac
TagalogTagalog
TagbanwaTagbanwa
Tai_LeTai Le
Tai_ThamTai Tham
Tai_VietTai Viet
TakriTakri
TamilTamil
TeluguTelugu
ThaanaThaana
ThaiThai
TibetanTibetan
TifinaghTifinagh
UgariticUgaritic
VaiVai
YiYi
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