charGroup$ ::= charClassSub | negCharGroup | posCharGroup >Character group
posCharGroup$ ::= ( charRangeBegin | charClassEsc ) ( charRange | charClassEsc )* charRangeEnd? >Positive character group (character range | character class escape)+
negCharGroup$ ::= '^' posCharGroup >Negative character group
posCharGroupND$ ::= ( charRangeBegin | charClassEsc ) ( charRange | charClassEsc )* charRangeEndND? >Positive character group (character range | character class escape)+
negCharGroupND$ ::= '^' posCharGroupND >Negative character group
charRange$ ::= seRange | XmlChar >Character range (XML character|s-e range)
charRangeBegin$ ::= seRangeBegin | XmlCharIncDash >Character range (XML character|s-e range)
charRangeEnd$ ::= seRangeEnd | XmlCharIncDash >Character range (XML character|s-e range)
charRangeEndND$ ::= seRangeEnd | XmlChar >Character range (XML character|s-e range)
seRange$ ::= charOrEsc '-' charOrEsc >s-e character range
seRangeBegin$ ::= charOrEscIncDash '-' charOrEsc >s-e character range
seRangeEnd$ ::= charOrEsc '-' charOrEscIncDash >s-e character range
charOrEsc$ ::= XmlChar | SingleCharEsc >XML character or single-character escape
charOrEscIncDash$ ::= XmlCharIncDash | SingleCharEsc >XML character or single-character escape
XmlChar$ ::= [^\#x2D#x5B#x5D] >XML character (all except \-[])
XmlCharIncDash$ ::= [^\#x5B#x5D] >XML character (all except \-[])