Kleines RegExp Problem
Schnaps
- php
Servus
Ich filter mit regexp teile aus einem string.
Das ist mein Muster: /^([a-zA-Z-&;]*)/([a-zA-Z-&;]*)/
Es findet wie erwartet aus dem String Treffer1/Treffer2
die beiden Treffer.
Nun kann es aber auch sein das der String nur wiefolgt aussieht
Treffer1
Und dann findet das Muster natürlich nichst mehr ich habe aber gerade keine Idee wie ich den Ausdruck ändern muß das er beide Möglichkeiten abdeckt. Wird wohl was mit dem | oder Strich sein, oder?
Währe nett wenn mir einer von euch eben auf die Sprünge hilft.
Prost
Schnaps
Hi,
Das ist mein Muster: /^([a-zA-Z-&;]*)/([a-zA-Z-&;]*)/
Geht das gut? Mit dem - mittendrin, das keinen Zeichenbereich kennzeichnet?
Es findet wie erwartet aus dem String Treffer1/Treffer2
die beiden Treffer.
Nun kann es aber auch sein das der String nur wiefolgt aussieht
Treffer1
Mit anderen Worten: der / ist optional.
Und dann findet das Muster natürlich nichst mehr ich habe aber gerade keine Idee wie ich den Ausdruck ändern muß das er beide Möglichkeiten abdeckt. Wird wohl was mit dem | oder Strich sein, oder?
Ne, ein Fragezeichen reicht - anzuwenden auf den Teil des Regex, der optional ist.
cu,
Andreas
hi
Mit anderen Worten: der / ist optional.
nee, das waere zu allgemein formuliert, denke ich. denn wenn
"Treffer1Treffer2" zwei teile enthaelt, muss schon ein / dazwischen sein.
optional ist also der teil /([a-zA-Z-&;]*)
der komplette ausdruck lautet somit:
/^([a-zA-Z-&;]*)(/([a-zA-Z-&;]*))?/
und noch besser ist eigentlich
/^([a-zA-Z-&;]*)(?:/([a-zA-Z-&;]*))?/
damit der zweite teil nicht mit slash gespeichert wird.
allerdings bin ich mir nicht ganz sicher, ob das bei php geht.
prost
seth
Hi,
nee, das waere zu allgemein formuliert, denke ich. denn wenn
"Treffer1Treffer2" zwei teile enthaelt, muss schon ein / dazwischen sein.
optional ist also der teil /([a-zA-Z-&;]*)
der komplette ausdruck lautet somit:
Deine Lösung:
/^([a-zA-Z-&;]*)(/([a-zA-Z-&;]*))?/
Meine Lösung:
/^([a-zA-Z-&;]*)/?([a-zA-Z-&;]*)/
Wo siehst Du den Unterschied beim gematchten Text?
Aufgrund des * nach der 2. [] kann die zweite Klammer () auch NICHTS matchen.
cu,
Andreas
hi Andreas!
/^([a-zA-Z-&;]*)(/([a-zA-Z-&;]*))?/
/^([a-zA-Z-&;]*)/?([a-zA-Z-&;]*)/Wo siehst Du den Unterschied beim gematchten Text?
aeh, ach so, hmm, ohh, aeh... *rotwerd*... ich muss weg... ;-)
ja, hast ja recht. *sich_in_ecke_stell_und_schaem*
@Schnaps, falls du jetzt verwirrt sein solltest: nimm Mudguards regexp. seine loesung ist besser (weil sie macht, was sie soll, aber kuerzer ist als die von mir genannte loesung.)
prost
seth