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$).)*$