Я пытаюсь использовать re2, но не вижу, как я получаю сопоставленные данные из RE2 :: Arg [], когда количество совпадений в регулярном выражении определяется во время выполнения.
У меня есть что-то вроде этого:
const RE2::Arg *args[10] = {};
int n = 0;
if (RE2::ConsumeN(_content.get(), rule.first, args, n)) {
int consumed = _content->data() - start;
//...stuff
}
Если моим регулярным выражением является «(foo) | (bar)», то args [0] и args [1] должны быть соответственно foo и bar, верно?
Как получить совпадающую строку из args [0] и так далее …?
IIRC RE2 :: ConsumeN изменяет свой первый аргумент, поэтому вы можете вызывать в цикле, чтобы получить последующие совпадения.
Попробуйте что-то вроде этого:
RE2::StringPiece input(_content.get());
while (RE2::ConsumeN(&input, rule.first, args, n)) {
// do your stuff
}
Смотрите также FindAndConsumeN, если вы поиск для совпадений, а не совпадающих префиксов.