\lstdefinelanguage{lRegex}{
number suffixes={},
moredelim=[s][{\xlstGetStyle{literals}}]{[}{]},
moredelim=**[is][{\xlsthlboxd{\xlstcustom}}]{&custom&}{&custom&},
add to literate=%
% anchors
{$}{{{\xlstGet{keywordA}{\$}}}}1 {\\$}{{\textbackslash\$}}2
{^}{{{\xlstGet{keywordA}{\textasciicircum}}}}1 {\\^}{{\textbackslash\textasciicircum}}2
% predef classes
{\\d}{{{\xlstGet{keywordA}{\textbackslash d}}}}2 {\\D}{{{\xlstGet{keywordA}{\textbackslash D}}}}2
{\\w}{{{\xlstGet{keywordA}{\textbackslash w}}}}2 {\\W}{{{\xlstGet{keywordA}{\textbackslash W}}}}2
{\\s}{{{\xlstGet{keywordA}{\textbackslash s}}}}2 {\\S}{{{\xlstGet{keywordA}{\textbackslash S}}}}2
{\\b}{{{\xlstGet{keywordA}{\textbackslash b}}}}2 {\\B}{{{\xlstGet{keywordA}{\textbackslash B}}}}2
{\\A}{{{\xlstGet{keywordA}{\textbackslash A}}}}2 {\\Z}{{{\xlstGet{keywordA}{\textbackslash Z}}}}2
{\\z}{{{\xlstGet{keywordA}{\textbackslash z}}}}2
% escape sequences
{\\n}{{{\xlstGet{keywordB}{\textbackslash n}}}}2 {\\t}{{{\xlstGet{keywordB}{\textbackslash t}}}}2
{\\r}{{{\xlstGet{keywordB}{\textbackslash r}}}}2 {\\\\}{{{\textbackslash\textbackslash}}}2
% quantifiers
{*}{{{\xlstGet{keywordB}{*}}}}1 {+}{{{\xlstGet{keywordB}{+}}}}1 {?}{{{\xlstGet{keywordB}{?}}}}1
{\\*}{{{\textbackslash*}}}2 {\\+}{{{\textbackslash+}}}2 {\\?}{{{\textbackslash?}}}2
{.}{{{\xlstGet{keywordC}{.}}}}1 {\\.}{{{\textbackslash.}}}2
% option
{|}{{{\xlstGet{keywordC}{\textbf{|}}}}}1 {\\|}{{{\textbackslash|}}}2%
% escaped groups
{\\(}{{{\textbackslash(}}}2 {\\)}{{{\textbackslash)}}}2
{\\[}{{{\textbackslash[}}}2 {\\]}{{{\textbackslash]}}}2
}

\RegisterLanguage{regex}{lRegex}