Если единственная часть примера, которую вы не понимаете, это обратный вызов, учтите, что:
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()).
}