[GELÖST] C++11 std::regex_match findet nichts
-
Guten Abend / Morgen zusammen,
Ich habe jetzt schon einige Stunden Fehler gesucht und das Internet durchsucht, aber leider keine Lösung für dieses Problem gefunden:
Ich möchte die neue std::regex_match Funktion nutzen, da ich schon regex_replace nutze weiß ich dass das eigentlich ganz gut geht.
Aber gerade die match Funktion will überhaupt nicht.Mein Code:
std::smatch sm; std::regex tags("<div>(.)+<\\/div>"); std::string result = resultStream.str(); std::regex_match(result, sm, tags, std::regex_constants::match_any); if(sm.size() < 1) { logger_.error("Resolving key error: 0x0" + std::to_string(__LINE__)); return ""; }Nun habe ich z.b.
wrf234rwe<div>foobar23@earth</div>Aber bei so was findet der match einfach 0 (sm.size() == 0).
Ich habe das Pattern und den Text schon in sämtlichen online Validatoren und Testern ausprobiert und alle finden das pattern, nur irgendwie nicht mein code.Zur Information, ich programmiere unter openSUSE (Linux) und kompiliere mit dem GCC (g++-4.9).
Jemand eine Ahnung was ich falsch mache?
GrußFer
EDIT: Ist gelöst siehe meinen letzten Post im Thread.
-
das + in die klammern?
<div>(.+)<\/div>
-
Zumindest vor ein paar Monaten hatte ich Probleme mit std::regex mit dem GCC - es war AFAIK schlicht (noch) nicht fertig implementiert - leider wird keine Exception geworfen oder gar einen Kompilierfehler generiert.
Ich bin dann auf Boost.Regex umgestiegen mit dem es einwandfrei funktionierte.
Ansonsten kannst du gut mit einem der vielen online Regex-Tools dein Ausdruck prüfen.
Edit: Auch mit der VS2013 Version von std::regex gabs keine Probleme. Hilft dir vielleicht zum vergleichen.
-
Problem gefunden!
Zum GCC: Der kann in Version 4.8 kein Regex (es schmeißt auch keine Fehler, returnt aber bei jeder Funktion null).
4.9 Kann Regex relativ gut (von der Geschwindigkeit ist aber komischerweise python schneller).Zu meinem Problem:
Ich habe einfach die Funktionen misverstanden: Ich musste nicht regex_match benutzen sondern regex_search();
Damit geht es dann.
Hier ein Funktionierendes Beispiel:
(Liest den Text in <div> tags)std::smatch sm; std::regex tags("<div>(.+)<\\/div>"); std::regex_search(inputStr, sm, tags); if(sm.size() < 2) { logger_.debug("Resolving text error"); return ""; } return sm.str(1);Danke aber an alle die versucht haben zu helfen

MfG