Probleme mit Regular Expressions
-
Guten Tag zusammen.
Seit mehreren Stunden plagt mich nun das Problem, Unterstützung für
Regular Expressions in mein MSVC++6-Projekt einzubauen. Ich
programmiere derzeit an einem kleinen IRC-Bot, der zwar in C++ gehalten
ist, allerdings auch große Mengen C verwendet (ich hoffe, dass ich dennoch im richtigen Forum poste
).
Ich habe auch schon etliche Lösungen durchprobiert, unter anderem:
Boost (RegEx++), PCRE, GNU RegEx (Windows-Port) usw.Das Problem liegt nun wirklich nur in der Einbindung. RegEx++ stört
es, dass ich C-Funktionen wie z.B. strpos() oder strcpy() nutze. PCRE
verweist in seiner 'pcre.h' das Struct 'pcre' auf 'real_pcre', welches
nirgendwo(!) definiert ist und mit GNU RegEx scheint die
Parameteranzahl der Funktionen in meinem Code dauernd falsch zu sein,
obwohl auch nicht anders dokumentiert.Ich frage mich, was ich Gravierendes falsch mache, dass KEIN RegEx bei
mir funktionieren will. Hat da möglicherweise jemand ähnliche
Erfahrungen oder Tipps, wie ich unkompliziert(!) reguläre Ausdrücke
in ein MSVC++6-Projekt einbauen kann?
-
boost.regex benutzen und keine c-funktionen wie strpos() etc. benutzen.
Man kann das alles in C++ lösen, einfach schön std::string benutzen.
-
Das wäre in der Tat die ideale Lösung. Allerdings ist das Projekt schon ziemlich fortgeschritten. Und die Umschreibung auf vollständiges C++ würde einen gesamten Neuanfang bedeuten, den ich mir eigentlich sparen wollte..
-
vielleicht kannst du ja einfach mittels std::string usw. den regex teil mit boost:regex machen und die ergebnisse etc. dann wieder in char*'s umwandeln.
Eigentlich sollte das doch machbar sein.
-
Ich halte es für masslos übertrieben, das wegen der Benutzung von std::string das ganze Projekt umgebaut werden muß. std::string kommt wunderbar mit C-Strings zurecht. std::string sollst du auch nur als Schnittstelle benutzen, also als Vermittler zwischen deinen C-Strings und boost::regex.
Welche Boost-Version benutzt du? Kann ja auch sein, das VC++6 von deiner boost-Version nicht mehr unterstützt wird?
-
Das war natürlich das Erste, was ich probierte - also std::string einfach als Schnittstelle zu benutzen. War bzw. ist auch überhaupt kein Problem. Allerdings mochte die Boost::regex-Library diverse C-Stringfunktionen nicht, indem der Compiler diverse 'ambigious call to overloaded function' meldete. Das ist auch das Problem, was mich zu einer Umstellung gezwungen hätte.
Dann hab ich noch den rettenden Tipp bekommen, ich solle einfach mal eine ältere Regex-Version (welche übrigens später mit in Boost übernommen wurde) probieren, mit der es auf Anhieb funktionierte: (auch hier mit std::string als "Schnittstelle")
http://ourworld.compuserve.com/homepages/John_Maddock/regexpp2.zip