c# - pas - regex dernier caractère



Expression régulière correspondant à une chaîne(1+ caractères) qui ne se termine PAS par.ext(extension) (2)

Je dois tester une URL qui ne se termine pas avec .asp

Donc test , test.html et test.aspx devraient correspondre, mais test.asp ne devrait pas correspondre.

Normalement, vous testeriez si l'URL se termine par .asp et annuleriez le fait qu'il correspondait à l'aide de l'opérateur NOT dans le code:

if(!regex.IsMatch(url)) { // Do something }

Dans ce cas, l'expression régulière serait \.asp$ mais dans ce cas j'ai besoin de l'expression régulière pour aboutir à une correspondance.

Contexte: J'ai besoin d'utiliser l'expression régulière comme contrainte d'itinéraire dans la méthode d'extension ASP.NET MVC RouteCollection.MapRoute . L'itinéraire doit correspondre à tous les contrôleurs, mais il doit tomber lorsque le contrôleur dans l'URL se termine par .asp

https://ffff65535.com


Essaye ça

^((?!\.asp$).)*$

L'astuce consiste à utiliser lookbehind négatif .

Si vous avez juste besoin d'une réponse oui / non:

(?<!\.asp)$

Si vous devez correspondre à l'URL complète:

^.*(?<!\.asp)$

Ces expressions régulières fonctionneront avec toutes les URL où le nom de fichier se trouve à la fin de l'URL (c'est-à-dire les URL sans requête ni fragment). Je suppose que vos URL correspondent à cette limitation étant donné le regex .asp $ dans votre question. Si vous voulez que cela fonctionne avec toutes les URL, essayez ceci:

^[^#?]+(?<!\.asp)([#?]|$)

Ou ceci si vous voulez que l'expression rationnelle corresponde à l'URL entière:

^[^#?]+(?<!\.asp)([#?].+|$)




regex