Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: VCL (C++ Builder) ::  boost::regex_replace Syntax     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Heimelchen
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.06.2010
Beiträge: 325
Beitrag Heimelchen Mitglied 13:40:14 02.09.2010   Titel:   boost::regex_replace Syntax            Zitieren

Hi,

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...
audacia
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.02.2005
Beiträge: 3802
Beitrag audacia Mitglied 22:50:46 02.09.2010   Titel:              Zitieren

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.

_________________
"Hey, it compiles! Ship it!"
C++Builder Pages · Typsichere Format-Strings
Heimelchen
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.06.2010
Beiträge: 325
Beitrag Heimelchen Mitglied 12:28:11 06.09.2010   Titel:              Zitieren

So geht's mit regex:
C/C++ Code:
boost::regex_replace(str, boost::regex("[\\W \\D]"), "_")
C/C++ Code:
boost::regex_replace(str, boost::regex("[\\W \\D]"), "_")
C/C++ Code:
boost::regex_replace(str, boost::regex("[\\W \\D]"), "_")


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...
audacia
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.02.2005
Beiträge: 3802
Beitrag audacia Mitglied 12:34:03 06.09.2010   Titel:              Zitieren

Heimelchen schrieb:
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).

_________________
"Hey, it compiles! Ship it!"
C++Builder Pages · Typsichere Format-Strings
C/C++ Forum :: VCL (C++ Builder) ::  boost::regex_replace Syntax   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

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.