PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Regular Expressions


Gnafoo
2005-01-14, 17:10:43
Hiho

Ich suche eine Möglichkeit mit Regular Expressions (in Ruby) Zeilen zu filtern und zwar nach diesem grundlegendem Aufbau:

"^@.*start\*$"

also zeilen wie:
@init start*
@default start*
@bla start*

Allerdings will ich außerdem, dass "@init start*" ebenfalls herausgefiltert werden soll, also das "init" am Anfang nicht drin vorkommen darf.
Nach einigem probieren / testen / lesen bin ich auf folgendes gekommen: (ich hoffe das stimmt jetzt, weil ichs grad nicht hier hab)

"^@([^i]|.[^n]|..[^i]|...[^t]).*start\*$"

Bekommt man das nicht auch irgendwie einfacher hin?

Danke im voraus
cya DerTod

Xmas
2005-01-14, 20:09:55
Das sollte funktionieren, ignoriert aber theoretisch auch alle anderen Wörter, die mit init beginnen.
Inwiefern einfacher? Lesbarer? Dazu sind Kommentare da. Es reicht doch wenn es funktioniert, was willst du mehr?

MadMan2k
2005-01-15, 14:47:56
Bekommt man das nicht auch irgendwie einfacher hin?
du könntest nochmal die matches filtern, also


if(matches[0] != "init") {
// mach was damit
}

Gnafoo
2005-01-16, 22:19:08
Das sollte funktionieren, ignoriert aber theoretisch auch alle anderen Wörter, die mit init beginnen.
Inwiefern einfacher? Lesbarer? Dazu sind Kommentare da. Es reicht doch wenn es funktioniert, was willst du mehr?

Naja ich bin in Sachen Regular Expressions noch nicht so bewandert und hab mir gedacht, man könnte statt dem ([^i]|.[^n]|..[^i]|...[^t]) auch sowas wie !(init) schreiben (ok ich weiß das das eben nicht geht, aber es hätte ja sein können, dass es was ähnliches gibt). Vor allem wenn man mehrere Sachen ausschließen will ist es nämlich auf bisherigen Wege kompliziert.

@MadMan2k
Auf so etwas ähnliches läuft es dann wohl hinaus. Wird zwar komplizierter, aber ist dann auch sauberer gelöst.

Trotzdem Danke für die Hilfe .. die Frage ist im Grunde genommen beantwortet, wenn es einfacher nicht möglich ist :D

cya
DerTod

CharlieB
2005-02-05, 22:58:21
das --->
"@init start*

wird durch dein regex gefunden,


aber das --->
"@init
start*

nicht

vorsuciht falls "cr" "lf" etc zwischen drinn sind ...

Gnafoo
2005-02-08, 02:34:50
Schon klar .. aber den alten Thread hättest du jetzt nicht mehr herauskramen müssen :D
Aber wenn wir schon dabei sind und falls es jemanden interessiert, ich habe doch noch was gefunden. In Ruby sind die Regexps etwas erweitert, so dass es doch einfacher möglich ist:

Aus "^@([^i]|.[^n]|..[^i]|...[^t]).*start\*$" wird dann "^@(?!init).*start\*$"

Näheres dazu hier (http://www.rubycentral.com/book/language.html) ab etwa der Hälfte der Seite unter "Regular Expressions"

cya DerTod