fixed bug in group counting Compile()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21114 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2003-06-13 17:02:29 +00:00
parent 09c6a817fa
commit 71b5725f30

View File

@ -204,21 +204,24 @@ bool wxRegExImpl::Compile(const wxString& expr, int flags)
m_nMatches = 1; m_nMatches = 1;
// and some more for bracketed subexperessions // and some more for bracketed subexperessions
const wxChar *cptr = expr.c_str(); for ( const wxChar *cptr = expr.c_str(); *cptr; cptr++ )
wxChar prev = _T('\0');
while ( *cptr != _T('\0') )
{ {
// is this a subexpr start, i.e. "(" for extended regex or if ( *cptr == _T('\\') )
// "\(" for a basic one?
if ( *cptr == _T('(') &&
(flags & wxRE_BASIC ? prev == _T('\\')
: prev != _T('\\')) )
{ {
// in basic RE syntax groups are inside \(...\)
if ( *++cptr == _T('(') && (flags & wxRE_BASIC) )
{
m_nMatches++;
}
}
else if ( *cptr == _T('(') && !(flags & wxRE_BASIC) )
{
// we know that the previous character is not an unquoted
// backslash because it would have been eaten above, so we
// have a bar '(' and this indicates a group start for the
// extended syntax
m_nMatches++; m_nMatches++;
} }
prev = *cptr;
cptr++;
} }
} }