solo regulares regular letras expresiones expresion espacios espacio ejemplos cuantificadores cualquier caracter blanco basicas alfanumerico c# .net asp.net-mvc regex

c# - regulares - Expresión regular para hacer coincidir una cadena(caracteres 1+) que NO finaliza en.ext(extensión)



expresiones regulares ejemplos (3)

El truco es usar lookbehind negativo .

Si solo necesita una respuesta de sí / no:

(?<!/.asp)$

Si necesita hacer coincidir la URL completa:

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

Estas expresiones regulares funcionarán con cualquier URL donde aparezca el nombre del archivo al final de la URL (es decir, URLs sin consulta o fragmento). Supongo que sus URL se ajustan a esta limitación dado el valor actual de .asp $ en su pregunta. Si quieres que funcione con todas las URL, prueba esto:

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

O esto si quieres que la expresión regular coincida con toda la URL:

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

Necesito probar una url que no termina con .asp

Así que test , test.html y test.aspx deberían coincidir, pero test.asp no debería coincidir.

Normalmente probarías si la url termina con .asp y niegas el hecho de que coincide con el operador NOT en el código:

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

En ese caso, la expresión regular sería /.asp$ pero en este caso necesito la expresión regular para dar como resultado una coincidencia.

Antecedentes: necesito usar la expresión regular como un contraint de ruta en el método de extensión ASP.NET MVC RouteCollection.MapRoute . La ruta necesita coincidir con todos los controladores, pero debería desaparecer cuando el controlador en la url finaliza con .asp


No es un método regexp, pero c # String.EndsWith, que podría hacer el trabajo fácilmente.

es decir

string test1 = "me.asp" ; string test2 = "me.aspx" ; test1.EndsWith(".asp") // true; test2.EndsWith(".asp") // false ;


Prueba esto

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