regex und regcomp



  • Moinsen zusammen,

    mich würde einmal interessieren, ob jemand von euch schon einmal mit den funktionen regex und regcomp gearbeitet hat. Nach stundenlangem googlen habe ich zwar recht wenige erläuterungen zum Thema gefunden, aber keine Code-Snippets.

    Da ich die Funktionsweise nun einigermaßen verstanden habe, aber sicher noch nicht ganz fest im Thema bin, könnte ich aber genau diese Snippets gebrauchen.

    Währe schön, wenn jemand einen Link zum Thema posten könnte.

    Spass Haben!

    PS: ich kenne Boost, aber möchte nicht damit arbeiten, auch wenn es bei der Verarbeitung von regulären Ausdrücken sicherlich einfacher währe.



  • Bist du sicher, dass du im richtigen Forum bist? Wo ist die spezifische Verbindung zum BCB!?



  • nun ich hätte vielleicht erwähnen sollen, das ich (natürlich) mit dem allseits beliebten C-Builder arbeite... andererseits habe ich in den Tutorials gelesen, das die oben genannten Befehle für den VC garnicht verfügbar sind. Kann sein, dass das nicht stimmt, aber da ich eh nur mit dem Builder progge war mir das relativ egal.

    ...



  • Also mein C++ Builder (v4) kennt weder regex noch regcomp....

    Was sollten die Funktionen denn können?

    -junix



  • kann sein, dass diese Funktionen erst ab v5 verfügbar sind, aber so genau weis ich das nicht, bei meiner v6 enterprise ist es jedenfalls dabei.

    Mit den Funkionen ist es möglich reguläre Ausdrücke zur bearbeiten, also in meinem fall eine reguläre Sprache zu entwickeln und dann gewisse Strings gegen zu prüfen ob sie dieser Sprache entsprechen. Bei Funktionalen Programmiersprachen ist das ja quasi schon von geburt an dabei, aber bei Sprachen wie C++ leider nur rudimentär in Form von Funktionen wie regexec und regcomp.

    Hier mal ein paar kleine Beispiele für Anwendungen mit regulären Ausdrücken - diese verwenden zwar nicht regcomp oder regexec, aber sie zeigen worum es ungefähr geht.

    Spass Haben! :p



  • Bei meinem BCB6 Enterprise kann ich weder regex noch regcom finden, weder werden sie in der Dokumentation noch in irgendeinem Header o.ä. erwähnt. Beshalb auch meine ursprüngliche Frage.



  • ups - diese fiesen Rechtschreibfehler, aber um mich zu verteidigen ich hab nur eins von beiden falsch geschrieben, das andere stimmt. Richtig sollten diese Funktionen heißen:

    regexec
    regcomp

    Und zur Sicherheit noch ein kleines (nicht funktionierendes) Snippet von mir:

    AnsiString Ausdruck = LabeledEdit1->Text;
            AnsiString V_String = LabeledEdit2->Text;
    
            // ausdruck compilieren
            regex_t compilat;
    
            char* cp1 = new char[Ausdruck.Length() + 1 ];
            strcpy( cp1, Ausdruck.c_str() );
    
            int comp = regcomp(&compilat, cp1  , 0);
            Memo1->Lines->Add("regcomp == "+  IntToStr(comp) + " ("+ get_regerror(comp, &compilat) +")");
    
            // ausdruck auswerten
    
            if (comp == 0) {
                    regmatch_t posi;
    
                    char* cp2 = new char[V_String.Length() + 1 ];
                    strcpy( cp2, V_String.c_str() );
    
                    int exec = regexec(&compilat, cp2, 100, &posi, 0);
                    Memo1->Lines->Add("regexec == "+  IntToStr(exec) + " ("+ get_regerror(exec, &compilat) +")");
            }
    
            regfree(&compilat);
    

    und noch ein kleiner Linkt um ganz sicher zu sein: http://www.pcre.org/

    Wie gesagt, würde mich riesig freuen, wenn jemand ein paar Snippets oder Tipps hätte, diese beiden Funktionen sind in meinen Augen ziemlich tückisch.

    Spass Haben! :p



  • PS: Über die Hilfe findet man die Begriffe _nur_ wenn man Hilfe->Suchen nutzt. Man findet _keine_ ergebnisse mi Hilfe->Index oder Hilfe->Inhalt.



  • Ahja, nun habe ich's auch gefunden. Ich bezweifle aber trotzdem, dass das eine BCB-spezifische Problemstellung ist. Ich würde dir empfehlen, noch mal in "Rund um" zu fragen, verschieben lohnt sich bei diesem aufgeblähten Thread nicht mehr.


Anmelden zum Antworten