diff --git a/include/boost/regex/v4/perl_matcher_common.hpp b/include/boost/regex/v4/perl_matcher_common.hpp index 76423689..6ec7662c 100644 --- a/include/boost/regex/v4/perl_matcher_common.hpp +++ b/include/boost/regex/v4/perl_matcher_common.hpp @@ -208,7 +208,7 @@ bool perl_matcher::find_imp() search_base = position = m_result[0].second; // If last match was null and match_not_null was not set then increment // our start position, otherwise we go into an infinite loop: - if(((m_match_flags & match_not_null) == 0) && (m_presult->length() == 0)) + if(((m_match_flags & match_not_null) == 0) && (m_result.length() == 0)) { if(position == last) return false; diff --git a/include/boost/regex/v4/regex_grep.hpp b/include/boost/regex/v4/regex_grep.hpp index bd7f9951..f59fceb8 100644 --- a/include/boost/regex/v4/regex_grep.hpp +++ b/include/boost/regex/v4/regex_grep.hpp @@ -55,23 +55,22 @@ inline unsigned int regex_grep(Predicate foo, return count; // we've reached the end, don't try and find an extra null match. if(m.length() == 0) { + if(m[0].second == last) + return count; // we found a NULL-match, now try to find // a non-NULL one at the same position: - BidiIterator last_end(m[0].second); - if(last_end == last) - return count; + match_results m2(m); matcher.setf(match_not_null | match_continuous); if(matcher.find()) { ++count; - last_end = m[0].second; if(0 == foo(m)) return count; } else { // reset match back to where it was: - m.set_second(last_end); + m = m2; } matcher.unsetf((match_not_null | match_continuous) & ~flags); }