Получить согласованные данные из re2 Arg

Я пытаюсь использовать 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] и так далее ...?


person zcourts    schedule 01.05.2015    source источник


Ответы (1)


IIRC RE2 :: ConsumeN изменяет свой первый аргумент, поэтому вы можете вызвать цикл для получения последующих совпадений.

Попробуйте что-то вроде этого:

RE2::StringPiece input(_content.get());

while (RE2::ConsumeN(&input, rule.first, args, n)) {
   // do your stuff
}

См. Также FindAndConsumeN, если вы ищите совпадения, а не совпадающие префиксы.

person Piotr    schedule 01.05.2015