Expression régulière: correspondance uniquement si elle ne se termine pas dans une séquence particulière
Je voudrais tester une url qui n'a PAS de fin en .html
Voici le schéma que je viens avec:
[/\w\.-]+[^\.html$]
Suivant les matchs, car il n'a pas de fin en .html
/blog/category/subcategory/
Ce n'est pas parce qu'elle se termine en .html:
/blog/category/subcategory/index.html
Cependant, ce qui suit ne correspond pas, bien que je veux que ce match, parce qu'il se termine dans .ht et pas .html
/blog/category/subcategory/index.ht
Comment devrais-je changer de modèle?
source d'informationauteur Kevin Le - Khnle
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un négatif lookbehind affirmation si votre moteur d'expression régulière prend en charge:
Si vous n'avez pas les assertions arrières, mais vous n'avez lookaheads ensuite, vous pouvez l'utiliser à la place:
Voir en ligne: rubular
Ce moteur utilisez-vous? Si c'est celui qui prend en charge les assertions avant, vous pouvez effectuer les opérations suivantes:
Si nous casser dans les composants, il ressemble à ceci:
Cela signifie que, pour chaque personnage, il vérifie que le modèle /.html$/ne peut pas correspondre ici, avant qu'il consomme le personnage.
Vous pouvez également l'ancrage de l'ensemble du motif avec
^
au début et à la$
à la fin de la force qu'il corresponde à l'ensemble de l'URL - sinon, c'est gratuit seulement une partie de l'URL. Avec ce changement, il devient