From 6a8507ce40cd5ed1cfa407256185aa303c01cd74 Mon Sep 17 00:00:00 2001 From: "O. Perret" Date: Sun, 27 Dec 2015 16:09:37 +0100 Subject: [PATCH] Keep match whose end is closest to the selection in reverse regex search. --- src/selectors.hh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/selectors.hh b/src/selectors.hh index 442a93c8..f718cbd3 100644 --- a/src/selectors.hh +++ b/src/selectors.hh @@ -239,13 +239,12 @@ inline bool find_last_match(const Buffer& buffer, const BufferIterator& pos, const bool is_pos_eol = is_eol(buffer, pos.coord()); const bool is_pos_eow = is_eow(buffer, pos.coord()); auto begin = buffer.begin(); - while (regex_search(begin, pos, matches, regex, - match_flags(is_bol(begin.coord()), is_pos_eol, is_pos_eow))) + while (begin != pos and regex_search(begin, pos, matches, regex, + match_flags(is_bol(begin.coord()), is_pos_eol, is_pos_eow))) { - if (begin == matches[0].second) - break; - begin = matches[0].second; - res.swap(matches); + begin = utf8::next(matches[0].first, pos); + if (res.empty() or matches[0].second > res[0].second) + res.swap(matches); } return not res.empty(); }