Hi,
"er" war übrigens ein Tippfehler und hätte "es" für "das Minuszeichen" heißen sollen. Sorry für die Verwirrung.
Das hatte ich schon ausprobiert - und auf deinen Rat hin auch gleich nochmal getestet, aber es hilft nicht!
Mit welchen Tests hast Du das bei welchen Ergebnissen ermittelt?
Liegt es vielleicht daran, dass ich "ereg" statt "preg" benutze?
Die preg sind "Perl style". Ich muss zugeben, dass ich mit dieser Art der RegExp die meiste Erfahrung habe und nicht genau weiß, ob es bei ereg anders lauten müsste - normalerweise aber nicht. Wenn nichts anderweitiges dagegenspricht, solltest Du preg verwenden; soweit ich weiß ist dies auch eine allgemeine Empfehlung von PHP-Experten in Bezug auf die Performance.
"^(.*)(/)([A-Za-z0-9\-_|]+)(/)([^/]*)$"
Btw: Ich vermute mal, das "|" möchtest Du da nicht wirklich drin haben :-) Außerhalb einer Zeichenklasse steht es für "oder", innerhalb einer Zeichenklasse ist es einfach das Zeichen, ohne besondere Bedeutung.
einfach durch "^(.*)(/)([^/]+)(/)([^/]*)$", das müsste für meine Zwecke ausreichen.
Das kannst natürlich nur Du wissen. Aus Sicherheitsgründen solltest Du aber bei der Whitelist ("[xyz]") statt der Blacklist ("[^xyz]") bleiben; mindestens dann, wenn der überprüfte String in irgendeiner Form vom User kommen könnte (auch indirekt).
Auch wenn mich jetzt brennend interessiert, woran das mit dem Bindestrich hapert.
Möglicherweise an Deiner Interpretation ;-) Es ist leicht möglich, durch nicht optimale Testfälle einen "falschen Fehler" zu sehen.
Cheatah