diff --git a/src/regex_impl.cc b/src/regex_impl.cc index 48b69ea2..c7c6fe08 100644 --- a/src/regex_impl.cc +++ b/src/regex_impl.cc @@ -1195,6 +1195,12 @@ auto test_regex = UnitTest{[]{ kak_assert(StringView{vm.captures()[0], vm.captures()[1]} == "boz"); } + { + TestVM vm{R"(foo)"}; + kak_assert(vm.exec("foofoo", RegexExecFlags::Search)); + kak_assert(*vm.captures()[1] == 0); + } + { TestVM vm{R"($)"}; kak_assert(vm.exec("foo\nbar\nbaz\nqux", RegexExecFlags::Search | RegexExecFlags::NotEndOfLine)); diff --git a/src/selectors.cc b/src/selectors.cc index 0585c63c..073a336e 100644 --- a/src/selectors.cc +++ b/src/selectors.cc @@ -864,12 +864,12 @@ static bool find_prev(const Buffer& buffer, const BufferIterator& pos, if (pos != buffer.begin() and regex_search( buffer.begin(), pos, matches, ex, - match_flags(buffer, buffer.begin(), pos))) + match_flags(buffer, buffer.begin(), pos) | RegexExecFlags::NotInitialNull)) return true; wrapped = true; return regex_search( buffer.begin(), buffer.end(), matches, ex, - match_flags(buffer, buffer.begin(), buffer.end())); + match_flags(buffer, buffer.begin(), buffer.end()) | RegexExecFlags::NotInitialNull); } template @@ -881,7 +881,7 @@ Selection find_next_match(const Context& context, const Selection& sel, const Re wrapped = false; const bool found = (direction == MatchDirection::Forward) ? find_next(buffer, utf8::next(pos, buffer.end()), matches, regex, wrapped) - : find_prev(buffer, utf8::previous(pos, buffer.begin()), matches, regex, wrapped); + : find_prev(buffer, pos, matches, regex, wrapped); if (not found or matches[0].first == buffer.end()) throw runtime_error(format("'{}': no matches found", regex.str()));