TL; DR Находка findAndConsume терпит неудачу, потому что не могу найти что-то в начале входа. В противном случае подразумевается, что матч найден, но я предполагаю, что он не может переместить буфер вправо, вызывая цикл infinte.
Согласно
header of re2:
// Like Consume(..), but does not anchor the match at the beginning of the
// string. That is, "pattern" need not start its match at the beginning of
// "input". For example, "FindAndConsume(s, "(\\w+)", &word)" finds the next
// word in "s" and stores it in "word".
То есть "картина" не нужно начинать свой матч в начале "вход"
В вашем коде, ваш паттерн являясь совпадением в начале ввода, следовательно, неправильное поведение.
Если вы кормите findAndConsume что-то вроде:
auto stringPiece = RE2::StringPiece("baaa");
Вы не должны иметь никаких больше ошибок в цикле.
Или, если вы хотите, вы можете просто использовать ConsumeN() вместо:
// Like FullMatch() and PartialMatch(), except that pattern has to
// match a prefix of "text", and "input" is advanced past the matched
// text. Note: "input" is modified iff this routine returns true.
static bool ConsumeN(StringPiece* input, const RE2& pattern, // 3..16 args
const Arg* const args[], int argc);
ли это цикл бесконечно или он застрял в функции FACN? –
@ Цикл Томас бесконечно (совпадения всегда увеличиваются) – Shmoopy
И каков вывод, если вы печатаете '& stringPiece'? –