2015-05-01 2 views
0

Я пытаюсь использовать re2, но не мог видеть, как я получаю согласованные данные из RE2 :: Arg [], когда количество совпадений в регулярном выражении определяется во время выполнения ,Получить сопоставленные данные из 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) | (бар)" арг [0] и арг [1] должна быть Foo и бар, соответственно правильно?

Как получить согласованную строку из args [0] и так далее ...?

ответ

0

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

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

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

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

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

Смежные вопросы