Regular Expressions > Problem mit Boost



  • Ich beschäftige mich gerade mit Boost::Regex. Nur leider möchte das nicht so richtig bei mir funktionieren.

    Egal, welche Funktion ich aufrufe, immer meckert der Builder.
    Hier mal ein Beispiel-Quellcode:

    const String s= "AB-CD 1234";
    static const boost::regex e("\\u{1,3}-\\u{1,2} \\d{1,4}[ \\0]*");
    if(boost::regex_match(s, e))
    {
    red3->Lines->Add("JUHU"); //red3 ist ein RichEdit
    }
    

    Fehlermeldung:

    [BCC32 Fehler] Unit1.cpp(61): E2285 Keine Übereinstimmung für 'boost::regex_match<BidiIterator,Allocator,charT,traits>(const UnicodeString,const boost::regex)' gefunden

    Was mache ich falsch, wo liegt der Fehler?

    Danke!



  • Das kann nicht funktionieren, da boost keinen UnicodeString kennt, bestenfalls std::string. Verzichte auf die VCL Typen und benutz´ std::string, dann soltte das auch klappen:

    [cpp]
    const string s= "AB-CD 1234";
    static const boost::regex e("\\u{1,3}-\\u{1,2} \\d{1,4}[ \\0]*");

    if(boost::regex_match(s, e))
    {
    red3->Lines->Add("JUHU"); //red3 ist ein RichEdit
    }
    [/cpp]

    Wenn das auch nicht geht, dann probier folgendes
    [cpp]
    const string s= "AB-CD 1234";
    static const boost::regex e("\\u{1,3}-\\u{1,2} \\d{1,4}[ \\0]*");

    if(boost::regex_match(s.c_str(), e))
    {
    red3->Lines->Add("JUHU"); //red3 ist ein RichEdit
    }
    [/cpp]



  • Das sagt doch die Fehlermeldung. regex_match hat keinen Konstruktor für einen String vom Typ UnicodeString (bei dir String). Da gibt es doch bestimmt eine memberfunktion die const wchar_t* zurückgiebt oder vielleicht const char*.
    [edit]oder so 🙂 [edit]



  • Ok, danke! Werde das heute Nachmittag sogleich ausprobieren.

    Habe mich an diesem Artikel orientiert, und da mein Quellcode 1zu1 daraus übernommen wurde, dachte ich, dass evtl eine Einstellung oder ähnliches bei mir falsch wäre.



  • Das Problem ist, dass dein Quellcode eben nicht 1:1 daraus entnommen wurde. Dort wird string verwendet. Du verwendest String. Das sind zwei verschiedene Klassen.



  • Ok. klappt alles wie es soll. DANKE!

    Stimmt habe nur den die zeile mit dem String von mir übernommen, gerade da muss ein entscheidener Fehler sein 🙄

    Bei der Fehlermeldung hat mich eben das
    boost::regex_match**<BidiIterator,Allocator,charT,traits>**(const UnicodeString,const boost::regex)
    verwundert, denn das meine ich noch nicht gesehen zu haben und ich dachte ich hätte da eventuell eine Besonderheit vergessen. Aber nun funktioniert ja alles und ich bin glücklich 😉



  • Hallo

    Das sind eben die Template-Spezifikation der Funktion regex_match. Gerade die boost-Bibliothek benutzt massenhaft Templates. Damit solltest du umgehen können, wenn du mit boost arbeiten willst.

    bis bald
    akari


Anmelden zum Antworten