Made a slight tweak so that it now treats an optional subpattern like a repeated subpattern (e.g. "(?:xyz)?" -> "(?:xyz){0,1}") to make use of the repeat guards.
The advantage over DFA is that it'll work even for those patterns that aren't compatible with DFA.
2015.5.7
Not secure
Hg issue 135: PyPy Support (with patch)
It should now build on PyPy.
2015.3.18
Not secure
Hg issue 133: support for captures() in expandf().
Now supported in expandf and subf.
Issue 23692: Undocumented feature prevents re module from finding certain matches
This also applied to regex which failed to take into account group references by group capture testa, e.g. "(?(1)...|...)", when guarding against excessive repeats.
2014.12.24
Not secure
Hg issue 132: index out of range on null property \p{}
It's now reported as an unknown property.
2014.12.15
Not secure
Hg issue 131: nested sets behaviour
The set difference operator '--' wasn't handled correctly after an implicit set union.
2014.11.14
Not secure
Unreported issue: no such builtin as 'ascii' in Python 2. Fixed.