boost::regex findet einfach nichts



  • Hey.
    Ich hab schon das Forum durchsucht, bin aber nicht mit dem ergebinissen, welche ich gefunden habe, zufrieden.

    Eig. ein ganz simples regex bsp. welches einfach nicht passt.

    int main()
    {
    	std::string message = "onsd7hd0 parameter1=\"eins\" parameter2=\"zwei\"fdddgdfgfdof09fdj0j4";
    	boost::regex PATTERN("parameter1=\"([\"]+)\" parameter2=\"([\"]+)\"");
    	boost::cmatch match;
    	if(boost::regex_match(message.c_str(), match, PATTERN))
    	{
    		std::cout << "match[1]: " << match[1] << std::endl;
    		std::cout << "match[2]: " << match[2] << std::endl;		
    	}
    	std::cin.get();
    	return 1;
    }
    

    Ich kenne den syntax schon von php. in der Dokumentation habe ich im syntax nicht viele Unterschiede gefunden.

    Ich gehe mal davon aus, dass der Pattern nicht passt, aber was passt denn nicht?

    EDIT: Nach mitlerweile über 5 Stunden rumprobieren, habe ich festgestellt, dass regex von boost bei den Pattern immer davon ausgeht, dass davor und dahinter nichts kommt, weshalb die Pattern von mir bisher nicht funktioniert haben.
    Ein Pattern wie der hier funktioniert :

    ".+parameter1=\"([^\"]*)\" parameter2=\"([^\"]*).+"
    

    mfg Darter



    1. Nimm boost::regex_search wenn du willst dass passende Teil-Strings gefunden werden
    2. Du hast in deinem ersten Beispiel die ^ in [^\"] vergessen, im EDIT sind sie dann magischerweise aufgetaucht

    (1) herauszufinden hat jetzt ca. 3-4 Sekunden gedauert. Aber gut, jeder findet das vermutlich nicht. Das gelbe Symbol mit dem Ausrufezeichen und "Important" daneben ist wirklich leicht zu übersehen. 🤡

    (2) verstehe ich dagegen, manchmal sieht man den Wald vor lauter Bäumen nicht 😉



  • Hey.
    Erstmal danke.
    Die sind nicht auf magische weise aufgetaucht, ich hatte sie hier beim posten leider vergessen, beim testen waren sie im quellcode natürlich vorhanden ^^.

    Ich war erstmal froh, dass ich überhaupt nen pattern zum laufen gebracht hab und aus anderen programmier-/scripsprachen war ich es nicht gewohnt, dass es dafür eine extra fuktion gibt, weshalb ich das tatsächlich übersehen habe xD.

    Ok, nun wollte ich es mal mit boos::regex_search probieren, und hab mir das bsp. dazu angeschaut.
    Leider blick ich da nicht ganz durch. Wenn du Zeit und Lust hast, wäre ich dir für ein kleines, leichtverständliches bsp. dankbar.

    mfg Darter



  • Du musst nur regex_match durch regex_search ersetzen in deinem Beispiel. Funktioniert bei mir tadellos.


Anmelden zum Antworten