我有字符串"SolutionAN ANANANA SolutionBN"
我想返回所有以Solution
开头并以N
结尾的字符串。
使用正则表达式boost::regex regex("Solu(.*)N");
我的输出为SolutionAN ANANANA SolutionBN
。
虽然我想以SolutionAN
和SolutionBN
离开。我是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;
}
}
答案 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;
}
}