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 Réponses :
Votre expression régulière ne correspond à aucun des cas, car vous recherchez des caractères sauf .
entre www.example.
et / category code > 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
.
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!
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.
Je suppose que cette expression pourrait probablement fonctionner:
^(?:https?:\/\/)?(?:www\.)?example\.com\/[^\/]+\/[^\/]+(?:\/)?$
Nous pouvons également définir explicitement example.com
:
^(?:https?:\/\/)?(?:www\.)?[^.]+\.[^\/]+\/[^\/]+\/[^\/]+(?:\/)?$
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.