2012-10-24 3 views
0

J'essaie de créer un extrait de regex qui correspond à une route d'URL.URL de routage d'URL

Fondamentalement, si j'ai cette route /users/:id je veux /users/100 pour correspondre, mais /users/100/edit pour ne pas correspondre.

Voici ce que j'utilise maintenant: users/(.*)/ mais à cause de la correspondance gloutonne, elle correspond à ce qui se passe après l'ID utilisateur. J'ai besoin d'un moyen de "casser" le match s'il y a un /edit ou autre chose à la fin de la route.

J'ai examiné l'opérateur Regex NOT mais sans succès.

Un conseil?

Répondre

1

Essayez-vous simplement de collecter des chiffres?

Vous pouvez utiliser users/(\d*)/

Et celui-ci est la façon dont vous le feriez si vous vouliez recueillir tout jusqu'à ce qu'un /, et il utilise un pas, ^/users/[^/]*$

+0

A dû le modifier légèrement pour mon usage: '^/users/[^ /] */$' mais c'est exactement ce que j'avais besoin de savoir, merci! :) –

0

Vous pouvez utiliser préanalyse négative:

users/(.*)/(?!edit)

Cela nécessitera toujours un slash final. Peut-être une meilleure solution serait:

users/(\d+)(?!/edit)

Voir this post pour plus d'informations.