2 votes

Le reste du chemin d'accès à l'URL dans le tableau des résultats après la correspondance du motif.

J'ai des difficultés à faire faire à ma regex ce que je veux qu'elle fasse :(

Je veux que ma regex fasse les 2 choses suivantes :

  1. trouver l'ID qui est la prochaine section du chemin d'accès à l'URL juste après la correspondance du motif pour "marque" ou "profil".
  2. que de diviser le reste des parties du chemin d'accès à l'URL après l'ID en éléments distincts dans le tableau des correspondances, le nombre de parties du chemin d'accès à l'URL après l'ID peut varier de zéro à plusieurs et la barre oblique de fin n'est pas toujours présente.

J'ai réussi à faire fonctionner la première partie via :

    <?php
    $url = 'https://demo.com/show/profile/123/slug/etc/';
    $pattern = '/\/(brand|profile)?\/([\d]+)/';
    preg_match($pattern, $url, $matches);
    var_dump($matches);

Ce qui fonctionne pour toutes ces chaînes de test :

    https://demo.com/show/profile/123
    https://demo.com/show/profile/123/
    https://demo.com/show/profile/123/slug
    https://demo.com/show/profile/123/slug/
    https://demo.com/show/profile/123/slug/etc
    https://demo.com/show/profile/123/slug/etc/

Mais je ne semble pas pouvoir résoudre la deuxième partie, même après avoir cherché une solution pendant des jours. Ma tentative la plus "réussie" jusqu'à présent est la suivante :

    \/(brand|profile)?\/([\d]+)\/?(.*)?\/?

Ce modèle capture le reste du chemin d'accès à l'URL, y compris la barre oblique de fin de ligne lorsqu'elle est présente (en fait, je ne veux pas de barre oblique de fin de ligne).

J'ai le code pour la première partie disponible sur : phpliveregex.com/p/pMO

Quelqu'un peut-il m'aider à étendre cela avec le code de la deuxième partie ?

Merci beaucoup !

0voto

shadowsheep Points 4250

Je suggère de diviser ce problème en deux sous-problèmes.

Je veux dire.

Pourrions-nous faire une première preg_match avec cette regex

(brand|profile)\/(\d+)(.*)

Ici, nous avons

  • Dans le 1er groupe de capture le match complet.
  • Dans la deuxième capture, groupez votre étiquette (marque ou profil).
  • Dans le 3ème groupe de capture nous avons l'ID (le numéro)
  • Et dans le 4ème groupe de capture le rappel URL

Ensuite, avec le rappel de l'URL complet (4ème groupe de capture), nous pourrions faire un preg_match_all avec cette regex

[^\/]+

Et ici vous avez tous les chemins de rappel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X