boost::regex Problem
-
Hey.
Ich habe ein kleines Problem mit regex von boost.
Was ist hier denn falsch :
std::string line = "HTTP/1.1 200 OK\n"; boost::regex REGEX_firstline("HTTP/1.1 (\d)+ ([^\n]+)"); boost::cmatch match; if(boost::regex_match(line,match, REGEX_firstline)) { // do something }Ich bekommme immer :
Error: Keine Instanz der überladenen Funktion boost::rexex_match stimmt mit der Argumentenliste überein.
Ich habe alle ausprobiert, und so ist auch ein bsp. in der hilfedatei aufgebaut.
mfg
-
Welche dieser Funktionen glaubst du aufzurufen:
http://www.boost.org/doc/libs/1_46_1/libs/regex/doc/html/boost_regex/ref/regex_match.html
?Rein von der Anzahl eine der letzten beiden, aber das passt ja offensichtlich überhaupt nicht.
Von deinem ersten Argument lässt sich auf die letzte Funktion schliessen und jetzt schau mal die Typen der anderen Argumente an!
-
Na wie kann das auf der Seite unten aufgelistete bsp. passen ?
-
Ich würde auf die vierte Variante tippen, da passen die Parametertypen am ehesten zusammen. Allerdings würde er als zweiten Parameter einen boost::smatch erwarten.
@Darter: Das Beispiel dort arbeitet mit char-Zeigern, nicht mit Strings

-
Darter schrieb:
Na wie kann das auf der Seite unten aufgelistete bsp. passen ?
Schau dir doch die Typen an, die die Funktion erwartet und dann überleg dir wozu die da sind und welche du dann da übergeben musst. Völlig unpassende Typen sind ja sicher nicht das richtige..
Wenn du noch Probleme hast mit Funktionsaufrufen solltest du noch ein wenig mehr die Grundlagen vertiefen.
-
Ich stecke jetzt seit Monaten in den Grundlagen, und hab leider nicht zeit jeden tag etwas zu programmieren, weshalb man das ein oder andere mal vergisst sry.
Das Problem hat sich auf jedenfall mal gelöst.
Nun aber direkt eine weitere Frage:
Jetzt wird ja bei diesem Pattern hier :
"HTTP/1.1 (\d)+ ([^\n]+)"bei der ersten Gruppierunh nach einer oder mehreren Zahlen gesucht, welches ich, wenn eine übereinstimmung gefunden wurde, mit match[1] anprechen kann.
Wenn ich mich nicht irre, steckt hinter match[1] ein char array ?!?
Nun möchte ich aber das subpattern in eine variable des typs Int schreiben.
Wie gehe ich da am besten vor ?
Das ganze zu casen wird sicherlich nicht viel bringen ^^
mfg
-
Darter schrieb:
Wenn ich mich nicht irre, steckt hinter match[1] ein char array ?!?
Genau genommen steckt dahinter ein sub_match<> - und das wird intern einen std::string verwalten. Für die Umrechnung dieses Strings in eine Zahl empfehle ich dir einen Blick in unsere FAQ.
-
boost::sub_match verwaltet intern zwei Iteratoren in die ursprüngliche Sequenz und setzt bei Bedarf einen std::basic_string<value_type> daraus zusammen.