2

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

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

虽然我想作为SolutionAN and出去SolutionBN。我是正则表达式的新手,任何帮助都将不胜感激。如果我正在使用代码片段

#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;
    }
}
4

1 回答 1

3

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

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;
    }
}
于 2013-05-21T09:15:01.340 回答