/ / Utilizzo della regex per abbinare la posizione con la sublocazione opzionale - regex, url

Usando espressioni regolari per abbinare la posizione con la sublocazione opzionale - regex, url

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 № 1

Modello: /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 / pancetta

Prima: spameggs / pancetta
Dopo: spameggs / pancetta

Prima: / 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"