如何使用C ++ Boost的regex_iterator()

时间:2010-04-07 14:31:47

标签: c++ regex boost iterator

我正在使用Boost匹配字符串中的子字符串。 Io迭代结果,我需要使用regex_iterator()

这是我找到的唯一用法示例,但我不理解回调。有人可以给我一个函数示例吗?


我们假设我的输入文字是:

"Hello everybody this is a sentense
Bla bla 14 .. yes 
date 04/15/1986 
"

我想得到:

"Hello" "everybody" "this" "is" "a" "sentense" "bla" "yes" "date"

2 个答案:

答案 0 :(得分:9)

如果您不理解的示例的唯一部分是回调,请考虑:

std::for_each(m1, m2, &regex_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()).
}

答案 1 :(得分:1)

根据您的解释您可以使用标记器功能。 并在其中加入更多逻辑。 看看boost::tokenizer

例如:

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
}

编辑:

您可以根据需要为分隔符添加任意数量的特殊字符:

boost::char_separator<char> sep_1(" *^&%~/|");