Разбор разделителя Boost.Regex

Это довольно быстрый вопрос, я просто не смог найти его ни в документации по Boost, ни в других примерах / руководствах по регулярным выражениям Boost.

Предположим, я хочу токенизировать строку, используя эту реализацию:

boost::regex re("[\\sXY]+");
std::string s;

while (std::getline(std::cin, s)) {
boost::sregex_token_iterator i(s.begin(), s.end(), re, -1);
boost::sregex_token_iterator j;
while (i != j) {
std::cout << *i++ << " ";
}
std::cout << std::endl;
}

Проблема в том, что выражение разделителя не будет повторяться. Мне также нужна строка разделителя. Как я могу убедиться в этом?

1

Решение

Если я правильно понимаю, вы хотите выполнять итерации через разделители в дополнение к итерации по токенам. Разве не достаточно создать еще один итератор токенов, который будет искать токены, идентифицированные вашим регулярным выражением?

 boost::sregex_token_iterator i(s.begin(), s.end(), re, -1);

boost::sregex_token_iterator j;
//now find the tokens that match the regex -> the delimiters
boost::sregex_token_iterator begin(s.begin(), s.end(), re), end;
while (i != j)
{
std::cout << *i++ << " ";
if( begin != end)
{
std::cout << "(delimiter = " << *begin++ << ") ";
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector