Я использую Повышение для соответствия подстрокам в строке. Io выполняют итерации по результатам, я должен использовать regex_iterator()
.
Это - единственный пример использования, который я нашел, но я не понимаю обратный вызов. Кто-то мог дать мне пример uage функции?
Давайте предположим, что мой входной текст:
"Hello everybody this is a sentense
Bla bla 14 .. yes
date 04/15/1986
"
Я хочу добраться:
"Hello" "everybody" "this" "is" "a" "sentense" "bla" "yes" "date"
Если единственная часть примера, которую вы не понимаете, - это обратный вызов, учтите, что:
std::for_each(m1, m2, ®ex_callback);
примерно эквивалентно:
for (; m1 != m2; ++m1){
class_index[(*m1)[5].str() + (*m1)[6].str()] = (*m1).position(5);
}
Предполагая, что в вашем случае, вы хотите сохранить все совпадения в векторе, вы должны написать что-то вроде:
//Warning, untested:
boost::sregex_iterator m1(text.begin(), text.end(), expression);
boost::sregex_iterator m2;
std::vector<std::string> tokens;
for (; m1 != m2; ++m1){
tokens.push_back(m1->str()).
}
Из вашего объяснения Вы можете использовать функцию токенизатора. И добавить в нее немного логики. посмотрите на boost :: tokenizer
ex:
boost::char_separator<char> sep_1(" ");
std::string msg_copy ("Hello everybody this is a sentense Bla bla 14 .. yes date 04/15/1986 ");
boost::tokenizer< boost::char_separator<char> > tokens(msg_copy, sep_1);
BOOST_FOREACH(std::string t, tokens)
{
// here you itterate t
}
edit:
Вы можете поместить в разделитель столько специальных символов, сколько захотите, например:
boost::char_separator<char> sep_1(" *^&%~/|");