From 71b5725f30bd6006f77f56ffdeb697b72241888d Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 13 Jun 2003 17:02:29 +0000 Subject: [PATCH] fixed bug in group counting Compile() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21114 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/regex.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/common/regex.cpp b/src/common/regex.cpp index 943fc2c46b..e96257c8b6 100644 --- a/src/common/regex.cpp +++ b/src/common/regex.cpp @@ -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++; + } + } + 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++; } - - prev = *cptr; - cptr++; } }