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 functionboost::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 functionperl_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 functionbool 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 functionboost::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 functionboost::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 functionsave\_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 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> > >::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 functionboost::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 toboost::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 toboost::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 toboost::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 toboost::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 toboost::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?