Pourquoi ne pas utiliser un arbre pour stocker les adresses de routage ? Comme le montre l'image, chaque case est une carte Lorsque vous demandez /user/111/profile/books/222, divisez d'abord l'URL 🎜>['/' , '111' , 'profile' , 'books' , '222'] Recherchez d'abord s'il y a un nœud / dans la première couche Recherchez ensuite s'il y a un nœud 111 dans la deuxième couche, sinon, entrez le nœud * puis vérifiez s'il y a un nœud de profil sur la troisième couche que vous avez recherchée, et ainsi de suite
La flexibilité affichée par les expressions régulières dans le routage est difficile à remplacer par d'autres technologies. Vous pouvez également utiliser des règles régulières pour optimiser les performances. Le principe est très simple. Combinez des règles régulières et utilisez une certaine stratégie pour déterminer laquelle
est basée sur les résultats de correspondance réguliers.
Par exemple, il y a
/user/{pid}/profile
/actualités
/product/{pid}
/product/{pid}/comment/{cid}
Quatre itinéraires
Utilisez une expression régulière #^(?|/user/(d+)/profile|/news|/product/(d+)()|/product/(d+)/comment/(d+)())$# pour faire correspondre
Lorsque les résultats de capture incluent respectivement 1, 0, 2 et 3 groupes, nous savons que les 1er au 4ème itinéraires ont respectivement été mis en correspondance. Grâce à du code pour fusionner automatiquement les règles régulières et attribuer le nombre de groupes de capture => mappage de routage, plusieurs règles régulières peuvent être fusionnées pour une seule correspondance
Voici une astuce à utiliser (?|) pour réinitialiser le groupe de capture
Pourquoi ne pas utiliser un arbre pour stocker les adresses de routage ?
Comme le montre l'image, chaque case est une carte
Lorsque vous demandez /user/111/profile/books/222, divisez d'abord l'URL
🎜>['/' , '111' , 'profile' , 'books' , '222']
Recherchez d'abord s'il y a un nœud / dans la première couche
Recherchez ensuite s'il y a un nœud 111 dans la deuxième couche, sinon, entrez le nœud *
puis vérifiez s'il y a un nœud de profil
sur la troisième couche que vous avez recherchée, et ainsi de suite
https://github/bephp/router
Ce projet n'utilise pas d'expressions régulières, mais coupe l'URL selon "/" et l'enregistre dans une arborescence.
Lors de la cartographie d'itinéraires, cela équivaut à parcourir l'arbre, et la complexité est O (log n).
Le projet est implémenté en PHP, mais le code est très petit. Cela devrait être facile à comprendre.
Pourquoi un dict de routage ne peut-il pas être maintenu ? La valeur est la func
correspondant à la cléLa flexibilité affichée par les expressions régulières dans le routage est difficile à remplacer par d'autres technologies. Vous pouvez également utiliser des règles régulières pour optimiser les performances. Le principe est très simple. Combinez des règles régulières et utilisez une certaine stratégie pour déterminer laquelle
est basée sur les résultats de correspondance réguliers.Par exemple, il y a
/user/{pid}/profile
/actualités
/product/{pid}
/product/{pid}/comment/{cid}
Quatre itinéraires
Utilisez une expression régulière
#^(?|/user/(d+)/profile|/news|/product/(d+)()|/product/(d+)/comment/(d+)())$#
pour faire correspondreLorsque les résultats de capture incluent respectivement 1, 0, 2 et 3 groupes, nous savons que les 1er au 4ème itinéraires ont respectivement été mis en correspondance. Grâce à du code pour fusionner automatiquement les règles régulières et attribuer le nombre de groupes de capture => mappage de routage, plusieurs règles régulières peuvent être fusionnées pour une seule correspondance
Voici une astuce à utiliser
(?|)
pour réinitialiser le groupe de captureRéférence http://nikic.github.io/2014/0...