Denk darüber nach,
$uri = '/post/search/foo';
$pattern = '~/post/search/[A-Za-z0-9_-]+(?=/|$)~i';
$matches = array();
preg_match($pattern, $uri, $matches);
print_r($matches); // Erfolg
Es funktioniert gut, da [A-Za-z0-9_-]
zu foo
gehört. Da ich ein Routen-Plugin schreibe, möchte ich, dass dies auch spezielle Zeichen matchen kann.
Ich stelle mir das Regex-Muster so vor:
[A-Z0-9!@#$%^&*()_+|\/?><~";:'*]+(?=/|$)
Ich habe versucht, jedes Sonderzeichen mit einem Schrägstrich zu escapen und das gesamte Muster mit preg_quote()
zu escapen, aber ohne Erfolg - ich stoße immer auf Kompilierungsfehler.
Die Frage ist, wie ein korrektes Matching für A-Z0-9!@#$%^&*()_+|\/?><~";:'*
durchgeführt werden sollte?