ich habe einen String Str, in dem ich alle Zeichen, die nicht [a-z],[A-Z] oder [0-9] sind mit einem '_' ersetzen möchte. Ich dokter nun schon einige Zeit an der Syntax für boost::regex_replace, aber bekomm keine lauffähige Version...
Das würde ich nicht mit einem Regex, sondern zumindest in Delphi mit Set-Operationen lösen:
Code:
if not CharInSet (C, ['A'..'Z', 'a'..'z', '0'..'9']) then ...
Code:
if not CharInSet (C, ['A'..'Z', 'a'..'z', '0'..'9']) then ...
Code:
if not CharInSet (C, ['A'..'Z', 'a'..'z', '0'..'9']) then ...
Vor allem deshalb, weil Set-Operationen in Delphi so schönen Code ergeben, und weil es deutlich schneller sein dürfte. Aber vielleicht ist das eine "premature optimization", und ich sollte einfach trotzdem einen Regex verwenden. Dann würde ich mal mit "[^A-Za-z0-9]{1}" beginnen und es einfach so lange auf den String anwenden, bis es keine Matches mehr gibt. (Wahrscheinlich bringt ein Aufruf der "Study"-Funktion einen relevanten Geschwindigkeitsvorteil - wenn boost.regex denn so etwas kennt.)
Für alle, die etwas Schwierigkeiten mit dem Erstellen regulärer Ausdrücke haben, kann ich übrigens Tools wie RegexBuddy empfehlen. Damit kann man sich Regexes zusammenklicken, die Funktionsweise verstehen und sie sogar debuggen.
So richtig schön finde ich regex auch nicht, weil ich meine Strings erst in den passenden Typ umwandeln muss.
CharInSet find ich recht interessant, allerdings ist mir nicht ganz klar, wie ich unter C++ so einen Zeichensatz zusammen baue. In der Onlinehilfe steht dazu nichts...
So richtig schön finde ich regex auch nicht, weil ich meine Strings erst in den passenden Typ umwandeln muss.
Ich habe mal einen exemplarischen und etwas minimalistischen PCRE-Wrapper, der System::String verwendet, geschrieben; du findest ihn hier. Vielleicht paßt dir das besser als boost::regex (es sollte auch die Übersetzungszeit deutlich beschleunigen, da der Header nur ein paar Zeilen lang ist).
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.