mirror of
https://github.com/boostorg/regex.git
synced 2025-07-17 14:22:08 +02:00
Fix bug in partial matches and POSIX or literal expressions.
[SVN r82673]
This commit is contained in:
@ -65,6 +65,8 @@ void perl_matcher<BidiIterator, Allocator, traits>::construct_init(const basic_r
|
|||||||
m_match_flags |= match_perl;
|
m_match_flags |= match_perl;
|
||||||
else if((re_f & (regbase::main_option_type|regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex))
|
else if((re_f & (regbase::main_option_type|regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex))
|
||||||
m_match_flags |= match_perl;
|
m_match_flags |= match_perl;
|
||||||
|
else if((re_f & (regbase::main_option_type|regbase::literal)) == (regbase::literal))
|
||||||
|
m_match_flags |= match_perl;
|
||||||
else
|
else
|
||||||
m_match_flags |= match_posix;
|
m_match_flags |= match_posix;
|
||||||
}
|
}
|
||||||
@ -326,6 +328,10 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_prefix()
|
|||||||
m_has_found_match = true;
|
m_has_found_match = true;
|
||||||
m_presult->set_second(last, 0, false);
|
m_presult->set_second(last, 0, false);
|
||||||
position = last;
|
position = last;
|
||||||
|
if((m_match_flags & match_posix) == match_posix)
|
||||||
|
{
|
||||||
|
m_result.maybe_assign(*m_presult);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#ifdef BOOST_REGEX_MATCH_EXTRA
|
#ifdef BOOST_REGEX_MATCH_EXTRA
|
||||||
if(m_has_found_match && (match_extra & m_match_flags))
|
if(m_has_found_match && (match_extra & m_match_flags))
|
||||||
|
@ -134,6 +134,17 @@ void test_partial_match()
|
|||||||
TEST_REGEX_SEARCH("a*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2));
|
TEST_REGEX_SEARCH("a*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2));
|
||||||
TEST_REGEX_SEARCH("\\w*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2));
|
TEST_REGEX_SEARCH("\\w*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2));
|
||||||
TEST_REGEX_SEARCH("(\\w)*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2));
|
TEST_REGEX_SEARCH("(\\w)*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2));
|
||||||
|
|
||||||
|
TEST_REGEX_SEARCH("(xyz)(.*)abc", extended, "xyzaaab", match_default|match_partial, make_array(0, 7, -2, -2));
|
||||||
|
TEST_REGEX_SEARCH("(xyz)(.*)abc", extended, "xyz", match_default|match_partial, make_array(0, 3, -2, -2));
|
||||||
|
TEST_REGEX_SEARCH("(xyz)(.*)abc", extended, "xy", match_default|match_partial, make_array(0, 2, -2, -2));
|
||||||
|
TEST_REGEX_SEARCH("(xyz)(.*)abc", extended, "x", match_default|match_partial, make_array(0, 1, -2, -2));
|
||||||
|
TEST_REGEX_SEARCH("(xyz)(.*)abc", extended, "", match_default|match_partial, make_array(-2, -2));
|
||||||
|
TEST_REGEX_SEARCH("(xyz)(.*)abc", extended, "aaaa", match_default|match_partial, make_array(-2, -2));
|
||||||
|
TEST_REGEX_SEARCH(".abc", extended, "aaab", match_default|match_partial, make_array(1, 4, -2, -2));
|
||||||
|
TEST_REGEX_SEARCH("a[_]", extended, "xxa", match_default|match_partial, make_array(2, 3, -2, -2));
|
||||||
|
TEST_REGEX_SEARCH(".{4,}", extended, "xxa", match_default|match_partial, make_array(0, 3, -2, -2));
|
||||||
|
TEST_REGEX_SEARCH(".{4,}", extended, "xxa", match_default|match_partial|match_not_dot_null, make_array(0, 3, -2, -2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_nosubs()
|
void test_nosubs()
|
||||||
|
Reference in New Issue
Block a user