Zeige Ergebnis 1 bis 3 von 3

Thema: Nicht ganz reguläre Probleme mit regulären Ausdrücken

  1. #1
    hat eine hohe Stromrechnung Benutzerbild von ElPolloDelDiablo
    Registriert seit
    03.09.2004
    Alter
    29
    Beiträge
    45.983

    Nicht ganz reguläre Probleme mit regulären Ausdrücken

    Hallo!

    Ich sitze gerade an einem C++-Programm, das eben mit etwas String-Verarbeitung herumhantieren muss. Dabei habe ich ein echt schrulliges Problem, das mir langsam graue Haare wachsen lässt (und mir zwei studierte Informatiker auch nicht spontan helfen können ).


    Im Wesentlichen ist der Code:
    Code:
    #include <string.h>
    #include <regex>
    ...
    
    using namespace std;
    
    ...
    
    
    regex reg("[A-Za-z]*:[A-E0-9]*;[A-E0-9]*.*", std::regex_constants::extended);
    
    ...
    
    bool matched = regex_match(some_string.c_str(), reg);
    Ok, so soll er mal aussehen. Zur Vereinfachung habe ich mal

    Code:
    regex reg("F.*", std::regex_constants::extended);
    genommen, und er matcht auch mit dem "some_string" (da ist ein Wort mit "F" am Anfang - nicht "Fuck", sondern ein Wort mit obiger Struktur, soll also auch mal "matched" sein, was er aber derzeit nicht ist). Interessant ist, dass er

    Code:
    regex reg("[F].*", std::regex_constants::extended);
    nicht matcht, was aber nach meinem Verständnis dasselbe ist.



    Wahrscheinlich sehe ich blöder Mathematiker den Wald vor lauter Bäumen nicht, und es ist eine Lösung, die so simpel ist, dass ich mich später mal schäme, diese Frage gestellt zu haben.

    System ist momentan Ubuntu 11.10, g++-Standardinstallationen, c++0x-Standard.

    Vielen Dank schon einmal!

  2. #2
    Offline
    wurde beim Posten geblitzt Benutzerbild von Fireandfuel
    Registriert seit
    01.08.2005
    Beiträge
    2.256

    Re: Nicht ganz reguläre Probleme mit regulären Ausdrücken

    Ich glaube dass das einfach keine saubere Implementierung des POSIX-Standards bei der verwendeten g++ Version ist.

    Es macht ja auch keinen Sinn das F alleine in eckige Klammern zu packen. Die eckigen Klammern sind eher dazu da um eine mehr als 1-elementige "Menge" von Zeichen (siehe POSIX BasicRegular Expressions) zu nutzen.
    Weitere Erklärung stehen im Link oben.

    : sysProfile.de : : Alle Unicode-Zeichen : : weg mit ACTA! :
    keinen Support per PN!


  3. #3
    hat eine hohe Stromrechnung Benutzerbild von ElPolloDelDiablo
    Registriert seit
    03.09.2004
    Alter
    29
    Beiträge
    45.983

    Re: Nicht ganz reguläre Probleme mit regulären Ausdrücken

    Zitat Zitat von Fireandfuel Beitrag anzeigen
    Ich glaube dass das einfach keine saubere Implementierung des POSIX-Standards bei der verwendeten g++ Version ist.

    Es macht ja auch keinen Sinn das F alleine in eckige Klammern zu packen. Die eckigen Klammern sind eher dazu da um eine mehr als 1-elementige "Menge" von Zeichen (siehe POSIX BasicRegular Expressions) zu nutzen.
    Weitere Erklärung stehen im Link oben.
    Och, mit regulären Ausdrücken kenne ich mich schon aus - und dass die Implementierung nicht ganz POSIX konform ist, wurde mir auch spätestens dann klar, als er ohne die Option "std::regex_constants::extended " sofort einen Fehler ausspuckt, sobald er eine Klammer im regulären Ausdruck hat.

    Natürlich habe auch so etwas wie "[FX].*" ausprobiert, funktioniert genau so wenig - war nur eine Vereinfachung. Der obige Ausdruck ist natürlich Blödsinn im Sinne des regulären Ausdrucks, aber sollte er eigentlich problemlos schlucken können; eine einelementige Menge kann ja unter Umständen durchaus mal vorkommen, das speziell abzufangen hielte ich eh für sehr problematisch.

    Trotzdem danke. Die Frage ist dann natürlich, wie man denn mit dieser C++-Implementierung umgeht. Ich habe zwar jetzt einen Workaround, der aber im Zweifelsfall zumindest unschöner ist und würde ihn gerne vermeiden.

Forumregeln

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •