Iterieren mit boost::sregex_iterator



  • Hallo,

    ich möchte einen regulären Ausdrück in einem Text suchen. Das sieht bei mir so aus:

    string text(...);
        boost::regex expr("<a href=\"(.*?)\".*?</a>");
        for (boost::sregex_iterator m1(text.begin(), text.end(), expr); m1 != boost::sregex_iterator(); ++m1) {
        	cout << m1->str() << endl;
        }
    

    Insbesondere

    m1 != boost::sregex_iterator()
    

    scheint mir sehr obskur. Geht das irgendwie besser?


  • Administrator

    Wie wäre es damit:

    std::string text = /* ... */;
    boost::regex expr("<a href=\"(.*?)\".*?</a>");
    
    std::for_each(boost::sregex_iterator(text.begin(),
                                         text.end(),
                                         expr),
                  boost::sregex_iterator(),
                  std::ostream_iterator<boost::smatch>(std::cout, '\n'));
    

    Oder falls du bei eine For-Schleife bleiben möchtest, wozu es in diesem Beispiel zwar keinen Grund gibt:

    std::string text = /* ... */;
    boost::regex expr("<a href=\"(.*?)\".*?</a>");
    
    boost::sregex_iterator iter(text.begin(), text.end(), expr);
    boost::sregex_iterator end;
    
    for(; iter != end; ++iter)
    { std::cout << iter->str() << std::endl; }
    

    Grüssli


Anmelden zum Antworten