JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

RegEx

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 02.05.2008, 11:47    Titel: RegEx Antworten mit Zitat

So
gestern hab ich den ganzen Abend mit RegEx rumgespielt. Mitlerweile scheint das auch schon ziemlich nett zu klappen, zum Beispiel hätte ich hier etwas um aus einem Dateinamen+Pfad nur den Pfad zu machen, oder um eine EMailadresse auszulesen:
Code:

.*(\\|/)   //Pfad trennen
([[:alnum:]]|_|\.|-)+@[[:alnum:]]+\.[[:alpha:]]+    //Emails trennen

Soweit bin ich davon auch schon ganz angetan, ich bin noch nicht ganz so fit mit boost::regex, aber wie gesagt, ein paar Beispiele gehen ja schon.

Jetzt wäre die Frage, ist RegEx schnell genug? Also RegEx scheint etwas sehr tolles und mächtiges zu sein, etwas wo man mit wenig aufwand und sehr wenig Code (Very Happy) ne Menge machen kann. Aber sollte ich daher Regex überall einsetzen?
Typisches Beispiel wäre z.B. das finden des Pfades einer Datei. Ich habe ein Modell und will die Textur aus dem selben Verzeichnis laden. Jetzt könnte ich das letzte / bzw. \ suchen und alles davor als Pfad nehmen, oder aber ich könnte Regex benutzen.
Desweiteren könnte man mit RegEx bestimmt auch schön Config Dateien auslesen, z.B. sich den Teil vor und nach dem = hohlen (ohne Whitespaces)

Oder ist RegEx zwar toll, aber für solche eher simplen Sachen total ungeeignet? Ich meine, eine lowlevel Implementierung wird immer schneller sein, aber ist Regex jetzt z.b. beim Pfad trennen 2 mal so langsam oder 1000 mal so langsam? Soll ich es immer benutzen, oder gibt es Stellen, wo es wegen Speicher/Geschwindigkeit sinnvoll wäre auf Regex zu verzichten?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 437

Medaillen: Keine

BeitragVerfasst am: 02.05.2008, 13:31    Titel: Antworten mit Zitat

Ich kenne RegEx bisher nur aus PHP und Java, und in beidem wird geraten, RegEx so wenig wie Möglich zu nutzen, da die wohl extra kompiliert werden müssen, was sehr zeit intensiv ist.
Ich weiß nicht, wie das in boost ist, aber ich nehme an, es ist da ähnlich.
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 04.05.2008, 12:05    Titel: Antworten mit Zitat

Jop das ist relativ flott. Der Mechanismus dahinter ist nur ein Endlicher Automat mit ein paar Zuständen der Zeichen für Zeichen den Prüfstring durchläuft. Compiler arbeiten damit auch und die sind ja auch schnell bei der Sache. :)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 04.05.2008, 13:16    Titel: Antworten mit Zitat

d.h. wenn ich eine RegEx erstelle, denkt der Rechner erstmal ein wenig und steckt sich was zusammen, wenn ich mit einer fertigen Regex dann irgendetwas mache, ist das ziemlich schnell?
Also was weiß ich, im Zeitraum von vieleicht 2 mal langsamer als alles hardgecodet wäre?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 04.05.2008, 15:55    Titel: Antworten mit Zitat

ja genau: regular expressions sind so konzipiert, dass sie durch Automaten (s. hazel) erstellt werden können. boost:regex ist eigentlich eine Parade-Implementierung, die sowohl schnell, als auch vorausbaubar und leicht ist. Also am meisten Geschwindigkeit kannst du sparen, wenn du vorher den Automat erstellst, also diesen Matcher oder so, und dann nur dagegen testest. Also als beispiel: so früh wie möglich ein regex.assign() ausführen um den Automaten zu bauen, dann kannst du mit regex_match relativ schnell immer wieder gegen diesen automaten testen.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 04.05.2008, 16:54    Titel: Antworten mit Zitat

Guddie.
Erste Test ergaben, dass ein Minibeispiel, das boost::regex benutzt ~400kb groß ist. Statisch gelinkt. Macht also irgendwas zwischen 100-350 kb zusätzlich für sowas schickes wie regex, ich denke das ist ganz ok, solange man es nicht bloß für eine kleine Stelle benutzt.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 07.05.2008, 19:09    Titel: Antworten mit Zitat

Hey JK :)

Falls du viel mit RegEx's machen musst kann ich dir Flex bzw JFlex empfehlen. Damit kannst du nen Parser bauen dem du nur nen großen String füttern musst und es liefert dir die gelesenen "Tokens"(1 Token pro RegEx) sowie die Werte die du vll daraus filterst. Man kann mit RegEx's nämlich net nur Muster erkennen sondern aus den gefundenen Mustern auch live und direkt Werte (nennt sich dort "Gruppen".. benannt oder unbenannt) entziehen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum