##  builtin subrules

a<at(1)>		ab					y	at (matching)
b<at(1)>		ab					n	at (not matching)
a<?same>		aa					y	between same characters
a<!same>		ab					y	between not-same characters
<ident>			2+3 ab2		<mob<ident>: ab2 @ 4>		capturing builtin <ident>
<.ident>			2+3 ab2		y		non-capturing builtin <.ident>

<?wb>def		abc\ndef\n-==\nghi	y	word boundary \W\w
abc<?wb>		abc\ndef\n-==\nghi	y	word boundary \w\W
<wb>			-			n	no boundary at all
<?wb>abc		abc\ndef\n-==\nghi	y	BOS word boundary
^^<wb>			-ab			n	BOS is not boundary
ghi<?wb>		abc\ndef\n-==\nghi	y	EOS word boundary
<wb>$$			ab-			n	EOS is not boundary
a<?wb>			abc\ndef\n-==\nghi	n	\w\w word boundary
\-<?wb>			abc\ndef\n-==\nghi	n	\W\W word boundary
<!wb>def		abc\ndef\n-==\nghi	n	nonword boundary \W\w
abc<!wb>		abc\ndef\n-==\nghi	n	nonword boundary \w\W
<!wb>abc		abc\ndef\n-==\nghi	n	BOS nonword boundary
ghi<!wb>		abc\ndef\n-==\nghi	n	EOS nonword boundary
a<!wb>			abc\ndef\n-==\nghi	y	\w\w nonword boundary
\-<!wb>			abc\ndef\n-==\nghi	y	\W\W nonword boundary

<upper>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<upper>: A @ 45>		<upper>
<+upper>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: A @ 45>			<+upper>
<+upper>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: ABCDEFGHIJ @ 45>	<+upper>+
<lower>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<lower>: a @ 55>		<lower>
<+lower>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: a @ 55>			<+lower>
<+lower>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: abcdefghij @ 55>	<+lower>+
<alpha>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<alpha>: _ @ 31>		<alpha>
<+alpha>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: _ @ 31>			<+alpha>
<+alpha>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: _ @ 31>	<+alpha>+
<digit>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<digit>: 0 @ 35>		<digit>
<+digit>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: 0 @ 35>			<+digit>
<+digit>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: 0123456789 @ 35>	<+digit>+
<xdigit>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<xdigit>: 0 @ 35>		<xdigit>
<+xdigit>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: 0 @ 35>			<+xdigit>
<+xdigit>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: 0123456789ABCDEF @ 35>	<+xdigit>+
<space>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<space>: \t @ 0>		<space>
<+space>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: \t @ 0>		<+space>
<+space>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: \t\n\r  @ 0>		<+space>+
<blank>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<blank>: \t @ 0>		<blank>
<+blank>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: \t @ 0>			<+blank>
<+blank>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: \t @ 0>			<+blank>+
<cntrl>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<cntrl>: \t @ 0>		<cntrl>
<+cntrl>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: \t @ 0>			<+cntrl>
<+cntrl>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: \t\n\r @ 0>		<+cntrl>+
<punct>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<punct>: ! @ 4>		<punct>
<+punct>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: ! @ 4>			<+punct>
# todo :pge<regression>
<+punct>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: !\\"#$%&/:;<=>?@[\\]^'_{|} @ 4>		<+punct>+
<alnum>		\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob<alnum>: _ @ 31>		<alnum>
<+alnum>	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: _ @ 31>	<+alnum>
<+alnum>+	\t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij	<mob: _ @ 31>	<+alnum>+
<+alnum+[_]>	ident_1				y	union of character classes
<+[ab]+[\-]>+	aaa-bbb				y	enumerated character classes
<+  [ a  b ]+[\-]>+		aaa-bbb		y	whitespace is ignored within square brackets and after the initial +
<+[ab]+[\-]>+	-ab-				y	enumerated character classes variant
<+[ab]+[\-]>+	----				y	enumerated character classes variant
<+[ab]+[\-]>+	-				y	enumerated character classes variant
<-[ab]+[cd]>+	ccdd				y	enumerated character classes variant
^<-[ab]+[cd]>+$	caad				n	enumerated character classes variant
<-  [ a  b ]+[cd]>+	ccdd			y	whitespace is ignored within square brackets and after the initial -
^<-upper>dent	ident_1				y	inverted character class
^<-upper>dent	Ident_1				n	inverted character class
<+alpha-[Jj]>+	abc				y	character class with no j
<+ alpha - [ Jj ]>	abc			y	character class with no j with ws
^<+alpha-[Jj]>+$	aJc			n	character class with no j fail
^a<|w>				a/			y	<|w> matches
^a<|w>				ab			n	<|w> without match

## vim: noexpandtab tabstop=4 shiftwidth=4
