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:
parent
09c6a817fa
commit
71b5725f30
@ -204,21 +204,24 @@ bool wxRegExImpl::Compile(const wxString& expr, int flags)
|
||||
m_nMatches = 1;
|
||||
|
||||
// and some more for bracketed subexperessions
|
||||
const wxChar *cptr = expr.c_str();
|
||||
wxChar prev = _T('\0');
|
||||
while ( *cptr != _T('\0') )
|
||||
for ( const wxChar *cptr = expr.c_str(); *cptr; cptr++ )
|
||||
{
|
||||
// is this a subexpr start, i.e. "(" for extended regex or
|
||||
// "\(" for a basic one?
|
||||
if ( *cptr == _T('(') &&
|
||||
(flags & wxRE_BASIC ? prev == _T('\\')
|
||||
: prev != _T('\\')) )
|
||||
if ( *cptr == _T('\\') )
|
||||
{
|
||||
// in basic RE syntax groups are inside \(...\)
|
||||
if ( *++cptr == _T('(') && (flags & wxRE_BASIC) )
|
||||
{
|
||||
m_nMatches++;
|
||||
}
|
||||
|
||||
prev = *cptr;
|
||||
cptr++;
|
||||
}
|
||||
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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user