2013-05-21 2 views
1

У меня есть строка "SolutionAN ANANANA SolutionBN" Я хочу вернуть всю строку, которая начинается с Solution и заканчивается N.Boost C++ regex - как вернуть все совпадения

При использовании regex boost::regex regex("Solu(.*)N"); Я получаю вывод как SolutionAN ANANANA SolutionBN.

Хотя хочу выйти SolutionAN и SolutionBN. Я новичок в regex в boost, любая помощь будет оценена. Отрывок если код, я использую

#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

Проблема заключается в том, что * жаден. Изменений в использовании нежадной версии (обратите внимание на ?):

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

Большого спасибо, у меня есть один дополнительное сомнение в регулярных выражениях предположит, у меня есть вход SolutionAN ANANANA SolutionBN а а Solution. Я хочу, чтобы все строки, которые начинаются с Солом и в конце, где рядом Солу начать работу, например Input: SolutionAN ANANANA SolutionBN а а Решение Выход: 3 разных строк SolutionAN ANANANA SolutionBN а а Solution –