Voglio reindirizzare /spam/(.*)
a /$1
(Compreso /spam/
a /
) e /spam
a /
, ma no /spam(.*)
a $1
o /$1
.
Così /spam/eggs/bacon
diventa /eggs/bacon
, /spam/
e /spam
entrambi diventano /
, e spameggs/bacon
non diventa eggs/bacon
.
Quale espressione regolare (chars)
a $1
la coppia realizza questo?
risposte:
0 per risposta № 1Modello: /spam(?:/(.*)|()$)
Sostituire: /$1
Questo sostituirà correttamente, è il più semplice dile soluzioni pubblicate finora, e ha il vantaggio aggiuntivo che la partita fallirà se il percorso non è della forma che stai considerando (cioè se non corrisponde /spam
o /spam/___)
1 per risposta № 2
Non sono sicuro del sapore RegExp, ma proverei qualcosa come ...
/(spam($|/))?(.*)
==> /$3
Ecco un esempio di PHP.
$rx = "~/(spam($|/))?(.*)~";
$arr = array(
"/spam",
"/spam/",
"/spam/eggs/bacon",
"spameggs/bacon",
"/spameggs/bacon"
);
foreach ($arr as $val) {
echo "<b>Before:</b> $valn<b>After:</b> " . preg_replace($rx,"/$3",$val) . PHP_EOL.PHP_EOL;
}
uscite
Prima: /spam
Dopo: /Prima: /spam/
Dopo: /Prima: / Spam / uova / pancetta
Dopo: / Uova / pancettaPrima: spameggs / pancetta
Dopo: spameggs / pancettaPrima: / Spameggs / pancetta
Dopo: / Spameggs / pancetta
1 per risposta № 3
Abbastanza semplice: ^.*((?<=^/spam/).*|(?<=^/spam))$
a /$1
Test (http://ideone.com/YqAAA):
"/spam" --> "/"
"/spam/" --> "/"
"/spam/one" --> "/one"
"/spam/one/two" --> "/one/two"