Hi!
Einfach ein ? eingefuegt. Das ist alles?! Hab ich bei mir auch gemacht, und siehe da, es funktioniert:
$referrer = 'http://www.domain.com/directory/index.html';
$referrer =~ s/[a-z]+://.+?////gi;
print $referrer; # /directory/index.html
»»
Jetzt frage ich mich nur noch: Warum? Was ist den an dem Fragezeichen so toll, dass er nicht mehr das LETZTE, sondern das NAECHSTE / sucht?
Regular Expressions haben normalerweise ein recht einnehmendes Wesen. Da die Verarbeitung solcher Audrücke in der Regel dadurch vorgegeben ist, daß der entsprechende String per Backtracking abgesucht wird, kommt unterm Strich dabei heraus, daß das größtmogliche Ergebnis als Treffer zurückgegeben wird ... ????
Anders ausgedrückt: es wird erstmal versucht, soviel wie möglich in das Ergebnis zu bekommen. Für den Teilausdruck [a-z]+://.+ bedeutet das denn also, daß der gesamte String genommen wird. Nun wird versucht, das / unterzubringen. Dabei geht man dann Schritt für Schritt rückwärts, bis das / passend verwendet werden kann. In diesem Falle also das LETZTE /. Ein ? dreht dieses einnehmende Verhalten nun in der Form um, daß versucht wird sowenig wie möglich in das Ergebnis zu übernehmen. Für den Teilausdruck [a-z]+://.+? wird also z.B. http://w als Ergebnis vorgehalten. Das / wird nun von Links nach rechts gesucht.
Da Du aber eh das letzte / behalten möchtest, kannst Du Dir natürlich auch das einnehmende Verhalten zu Nutze machen, indem Du einfach soviel wie möglich bis zum / einsammeln läßt:
also durch [^/]+ (alles was nicht / ist).
macht alles zusammen sowas wie:
$referrer = 'http://www.domain.com/directory/index.html';
$referrer =~ s/^\w+://[^/]+//;
Das g kannst Du Dir sparen, da Du die Ersetzung nur einmal benötigst ...
Gruß,
Jörk