3 Stimmen

Regulärer Ausdruck für optionale Segmente eines URIs?

Derzeit habe ich eine einfache Router-Klasse, die URIs nimmt und versucht, sie auf die eingehende Anfrage URI entsprechen. Ein einfaches Beispiel für eine Route, die mit der Anfrage-URI übereinstimmen könnte, wäre:

/user/([0-9]+)

Dies würde also einem Anfrage-URI von "user/1" entsprechen.

Jetzt versuche ich, optionale Parameter abzugleichen. Das funktioniert:

/user([/0-9]?)

Dies würde jedoch eine beliebige Anzahl von Schrägstrichen in dem Segment zulassen. Wie kann ich erzwingen, dass dem optionalen Segment folgende Zeichen vorangestellt werden eine Schrägstrich und dann Zahlen?

3voto

Howard Punkte 37723

Probieren Sie den folgenden regulären Ausdruck aus:

/user(/[0-9]+)?

Er passt auf "/user" gefolgt von "/" plus einer oder mehreren Ziffern oder auf "/user" allein. Wenn Sie nur die Ziffern gruppieren wollen, können Sie sie in eine nicht-erfassende Gruppe einschließen:

/user(?:/([0-9]+))?

Sie können es einschließen in ^ y $ beim Aufruf von preg_match :

preg_match( "/^\/user(?:\/([0-9]+))?$/", "/user/1234", $m);
print_r($m);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X