Hallo MudGuard,
(entweder|oder|)(?:/?|/unterverzeichnis)
Schon mit
(entweder|oder)?/(?:unterverzeichnis)?
probiert?
Nein. Die Klammern müssen nämlich umbedingt "finden". Kennst du mod_rewrite? Darum geht es in diesem Fall jedenfalls. Wie bei Perl auch kommen die Backreferences auf die gefundenden Klammern mittels $x zustande. Entsprechend habe ich z.B. soetwas:
^verzeichnis(?:/?|(unterverzeichnis)(?:/?|(nocheins)(?:/?|(undnocheins))))$
und das wird dann an
"bla.cgi?verz1=$1&verz2=$2&verz3=$3
ersetzt. (Selbstverständlich sieht der Pattern dann etwas komplizierter aus, soetwas wie da oben hätte recht wenig sinn ;) Würde ich hierbei anstatt des Patterns oben
^verzeichnis(/unterverzeichnis(/nocheins(/undundnocheins)?)?)?$
oder sowas schreiben, würde es nicht mehr funktionieren. Denn z.B. würden die existierenden "Rückreferenzen" sich "verschieben". Verstehst du, was ich meine? (Verzeihe mir, ich bin gerade nicht in der Lage, es besser auszudrücken 8[)
Wieso funktioniert
(auswahl|andereauswahl|)
nicht?
Ich schätze mal, daß die leere Alternative nicht so gut ist.
Ja, davon gehe ich auch aus. Aber z.B. bei den PHP-Regulären Expressions (Perl Compatible & POSIX erweitert) sowie bei ganz einfachen Perl-Regular-Expressions funktioniert sowas wunderbar.
(auswahl|andereauswahl)?
sollte bewirken, daß auswahl, andereauswahl oder garnix gefunden wird.
Das ist ja wunderbar, aber nehmen wir mal folgendes Beispiel:
^(a|b)?(?:/?|/c)$
> "bla=$1&zwei=$2"
Beim Testen mit der Eingabe "a/c" würde hierbei "bla=a&zwei=c" herauskommen. Bei der Eingabe von "/c" jedoch "bla=c&zwei=". Und darf dann in diesem fall nicht funktionieren, wenn das nämlich ein Querystring für ein CGI-Script wäre. Sofern ich das Script dann nicht das ganze versuchen lassen will, dynamisch zu erkennen, dann würde das ein ziemliches Schuselzeugs werden. Somit muss $1 _umbedingt_ "treffen", also gesetzt sein (wenn auch als ""), damit dann sowas wie
"cgi.pl?typ=$1&year=$2&month=$3&day=$4"
nicht zu "cgi.pl?typ=2004&year=may&month=03&day=" wird.
Dann nimm:
((?:auswahl|andere)?)
Tja, genau daran habe ich etwa 4 Minuten nach meinem posting auch gedacht. Seltsamerweise funktioniert es nicht! Es ist mir ein Rätsel, warum nicht. Ich werde es nochmal ausprobieren.
WauWau
ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
E-Mail WauWau: [mailto:der-wauwau@gmx.de]