2016-08-09 90 views
0

Ich bin mit dem folgenden regulären AusdruckPhp Regular Expression Debuggen

/^(?P<prefix>admin{1})?[\/]?(?P<controller>[a-z-]+)[\/]?(?P<method>[a-z-]+)[\/]?(?P<parameters>[a-z0-9-\/]+(?=\/page))?[\/]?page\/(?P<page>[0-9]+)?$/i

ich will es eine Übereinstimmung finden mit dem folgenden:

controller/method/parameters/another/something

controller = controller, method = method, parameters = parameters/another/something

aber wenn Das angegebene Argument lautet

controller/method/parameter/another/something/page/1

sollte es zurück:

controller = controller, method = method, parameters = parameter/another/something, page = 1

ich ein Spiel nur ich immer, wenn ich das page/1 Argument liefern. Irgendwelche Hilfe, die entschuldigt, was mit meiner Regex falsch ist?

+1

Hast Du diesen Webdienst versucht regex zu debuggen? (Https://regex101.com) – kyasbal

+0

ja, ich bin nach wie vor Verwenden Sie es, um die Regex seit dem Morgen zu debuggen. https://regex101.com/r/sI7qP2/3 –

Antwort

0

Ein Lookahead kann nicht optional sein, und auch Ihr Parameter Regex ist zu gierig. Sie könnten dieses Problem lösen, indem Sie die Positionen page und parameters tauschen, wenn page kein obligatorischer Parameter ist!

(und zusätzlich brauchen Sie nicht die eckigen Klammern um die entkam Schrägstriche!)