1
votes

Regex - correspond à l'URL, mais pas aux niveaux plus profonds

Je mets à jour un site où j'ai peu de contrôle sur la structure du contenu ou le moteur, je dois donc afficher un widget sous condition en fonction de la correspondance d'URL.

J'ai besoin que mon code s'exécute quand Regex correspond

www.example.com/index.php/category/subcategory

mais PAS quand il correspond

www.example.com/index.php/category


3 commentaires

Ancrez l'expression régulière avec $ ou lookahead, en fonction de l'endroit et de la manière dont vous faites correspondre l'URL.


Votre regex ne correspond à aucun des cas!


@CinCout Oui, désolé, j'ai réalisé que j'avais écrit cet exemple avant qu'il ne se soit avéré que le lien contenait "index.php" au milieu.


3 Réponses :


1
votes

Votre expression régulière ne correspond à aucun des cas, car vous recherchez des caractères sauf . entre www.example. et / category mais clairement index.php contient un . .

Utilisez plutôt ce qui suit:

www\.example\.\S+\/category$

Ici, j'ancre la fin de la chaîne de recherche via $ , et je recherche au moins un caractère non blanc entre www.example. et / category .

Démo


1 commentaires

Oui, désolé, j'ai réalisé que j'avais écrit cet exemple avant qu'il ne se soit avéré que le lien contenait "index.php" au milieu. Votre réponse était correcte, et j'ai mis en œuvre cela, et fonctionne parfaitement. Merci beaucoup!



1
votes

Vous pouvez utiliser le modèle suivant pour faire correspondre votre chaîne d'URL jusqu'à la catégorie

^www.example.com\/\S+\/category$

Vous pouvez vérifier ici pour plus d'explications et tester son fonctionnement.


0 commentaires

1
votes

Je suppose que cette expression pourrait probablement fonctionner:

^(?:https?:\/\/)?(?:www\.)?example\.com\/[^\/]+\/[^\/]+(?:\/)?$

Nous pouvons également définir explicitement example.com:

^(?:https?:\/\/)?(?:www\.)?[^.]+\.[^\/]+\/[^\/]+\/[^\/]+(?:\/)?$


0 commentaires