Probleme mit Boost Regex Iteratoren



  • Hallo liebe Codergemeinschaft,

    Ich kämpfe seit Tagen mit den Iteratoren bei der regex_search Funktion. Ich hab den Beispiel Code aus dem Internet übernohmen und weiß einfach nicht mehr was ich machen soll. Also könnt ihr mal über den Code schauen ?

    #include <iostream>
    #include <string>
    #include <boost/regex.hpp>
    #include <fstream>
    
    using namespace std;
    const int BUFSIZE = 10000;
    
    int main(int argc, char** argv) {
    
       // Safety checks omitted...
       boost::regex re("<a\\s+href=\"([\\-:\\w\\d\\.\\/]+)\">");
       string file(argv[1]);
       char buf[BUFSIZE];
       //boost::cmatch matches;
       string sbuf;
       string::const_iterator begin, end;
       ifstream in(file.c_str());
       boost::match_results<std::string::const_iterator> matches;
       boost::match_flag_type flags = boost::match_default|boost::match_partial;
    
       while (!in.eof())
       {
          in.getline(buf, BUFSIZE-1);
          sbuf = buf;
          begin = sbuf.begin();
          end = sbuf.end();
    
          while (boost::regex_search(begin, end, matches, re, flags))
          {
             string url(matches[1].first, matches[1].second);
             cout << "URL: " << url << endl;
             // Update the beginning of the range to the character
             //following the match
             begin = matches[1].second;
          }
       }
    }
    

    Schonmal Danke im Voraus.

    MFG seennoob



  • Hab den Code angeschaut. Sehr schön.

    Ich hab den Beispiel Code aus dem Internet übernohmen und weiß einfach nicht mehr was ich machen soll.

    Kompilieren? Ausführen?

    Wo genau liegt das Problem?



  • Beim compilieren

    siehe Fehlermeldungen:
    build/Debug/GNU-Linux-x86/main.o: In function boost::basic\_regex<char, boost::regex\_traits<char, boost::cpp\_regex\_traits<char> > >::assign(char const*, char const*, unsigned int)': /usr/include/boost/regex/v4/basic\_regex.hpp:262: undefined reference toboost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
    build/Debug/GNU-Linux-x86/main.o: In function perl_matcher': /usr/include/boost/regex/v4/perl\_matcher.hpp:347: undefined reference toboost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
    build/Debug/GNU-Linux-x86/main.o: In function bool boost::regex\_search<\_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > >, std::allocator<boost::sub\_match<\_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > > > >, char, boost::regex\_traits<char, boost::cpp\_regex\_traits<char> > >(\_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > >, \_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > >, boost::match\_results<\_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > >, std::allocator<boost::sub\_match<\_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > > > > >&, boost::basic\_regex<char, boost::regex\_traits<char, boost::cpp\_regex\_traits<char> > > const&, boost::regex\_constants::\_match\_flags, \_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > >)': /usr/include/boost/regex/v4/regex\_search.hpp:56: undefined reference toboost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::find()'
    build/Debug/GNU-Linux-x86/main.o: In function boost::cpp\_regex\_traits<char>::transform(char const*, char const*) const': /usr/include/boost/regex/v4/cpp\_regex\_traits.hpp:888: undefined reference toboost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
    build/Debug/GNU-Linux-x86/main.o: In function boost::cpp\_regex\_traits<char>::transform_primary(char const*, char const*) const': /usr/include/boost/regex/v4/cpp\_regex\_traits.hpp:892: undefined reference toboost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
    build/Debug/GNU-Linux-x86/main.o: In function save\_state\_init': /usr/include/boost/regex/v4/perl\_matcher\_non\_recursive.hpp:107: undefined reference toboost::re_detail::get_mem_block()'
    build/Debug/GNU-Linux-x86/main.o: In function boost::re\_detail::perl\_matcher<\_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > >, std::allocator<boost::sub\_match<\_\_gnu\_cxx::\_\_normal\_iterator<char const*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > > > >, boost::regex\_traits<char, boost::cpp\_regex\_traits<char> > >::match_match()': /usr/include/boost/regex/v4/perl\_matcher\_common.hpp:479: undefined reference toboost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > const&)'
    build/Debug/GNU-Linux-x86/main.o: In function boost::re\_detail::cpp\_regex\_traits\_implementation<char>::error\_string(boost::regex\_constants::error_type) const': /usr/include/boost/regex/v4/cpp\_regex\_traits.hpp:436: undefined reference toboost::re_detail::get_default_error_string(boost::regex_constants::error_type)'
    /usr/include/boost/regex/v4/cpp_regex_traits.hpp:438: undefined reference to boost::re\_detail::get\_default\_error\_string(boost::regex\_constants::error\_type)' build/Debug/GNU-Linux-x86/main.o: In functionvoid boost::re_detail::raise_error<boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > >(boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::error_type)':
    /usr/include/boost/regex/pattern_except.hpp:75: undefined reference to boost::re\_detail::raise\_runtime\_error(std::runtime_error const&)' build/Debug/GNU-Linux-x86/main.o: In functionboost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::extend_stack()':
    /usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:197: undefined reference to boost::re\_detail::get\_mem\_block()' build/Debug/GNU-Linux-x86/main.o: In functionboost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::unwind_extra_block(bool)':
    /usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:978: undefined reference to boost::re\_detail::put\_mem\_block(void*)' build/Debug/GNU-Linux-x86/main.o: In function~save_state_init':
    /usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:115: undefined reference to boost::re\_detail::put\_mem\_block(void*)' build/Debug/GNU-Linux-x86/main.o: In functionboost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::find_imp()':
    /usr/include/boost/regex/v4/perl_matcher_common.hpp:290: undefined reference to `boost::re_detail::verify_options(unsigned int, boost::regex_constants::_match_flags)'

    Entschuldigt bitte das ich das Forum mit dem "verstopfe"



  • Hast du die libs überhaupt? regex ist nicht Header Only, dass heisst, dass du Libs selbst builden musst, oder fertige binarys laden musst.



  • Meines wissens ja
    Eine normale Suche ohne Iteratoren funktioniert problemlos.

    MFG



  • Linkst du sie auch mit?


Anmelden zum Antworten