Boost C ++正则表达式 - 如何返回所有匹配项

时间:2013-05-21 09:01:08

标签: c++ regex boost

我有字符串"SolutionAN ANANANA SolutionBN"我想返回所有以Solution开头并以N结尾的字符串。

使用正则表达式boost::regex regex("Solu(.*)N"); 我的输出为SolutionAN ANANANA SolutionBN

虽然我想以SolutionANSolutionBN离开。我是regex的新手,我将不胜感激任何帮助。 我正在使用的代码片段

#include <boost/regex.hpp>
#include <iostream>

int main(int ac,char* av[])
{
    std::string strTotal("SolutionAN ANANANA SolutionBN");
    boost::regex regex("Solu(.*)N");

    boost::sregex_token_iterator iter(strTotal.begin(), strTotal.end(), regex, 0);
    boost::sregex_token_iterator end;

    for( ; iter != end; ++iter ) {
           std::cout<<*iter<<std::endl;
    }
}

1 个答案:

答案 0 :(得分:2)

问题在于*是贪婪的。更改为使用非贪婪版本(请注意?):

int main(int ac,char* av[])
{
    std::string strTotal("SolutionAN ANANANA SolutionBN");
    boost::regex regex("Solu(.*?)N");

    boost::sregex_token_iterator iter(strTotal.begin(), strTotal.end(), regex, 0);
    boost::sregex_token_iterator end;

    for( ; iter != end; ++iter ) {
           std::cout<<*iter<<std::endl;
    }
}