正则表达式匹配不以.ext(扩展名)结尾的字符串(1+个字符)

我需要测试一个.asp结尾的url

所以testtest.htmltest.aspx应匹配,但test.asp不匹配。

通常你会测试url 是否以.asp结尾,并否定它在代码中使用NOT运算符匹配的事实:

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

在这种情况下,正则表达式将是\.asp$但在这种情况下我需要正则表达式来产生匹配。


背景:我需要在ASP.NET MVC RouteCollection.MapRoute扩展方法中使用正则表达式作为路由RouteCollection.MapRoute 。 路由需要匹配所有控制器,但是当url中的控制器以.asp结尾时,它应该通过

诀窍是使用负面的lookbehind 。

如果您只需要一个是/否答案:

 (? 

如果您需要匹配整个url:

 ^.*(? 

这些正则表达式适用于URL末尾出现文件名的任何URL(即没有查询或片段的URL)。 我假设您的url符合此限制,因为您的问题中包含正则表达式.asp $。 如果您希望它与所有url一起使用,请尝试以下操作:

 ^[^#?]+(? 

或者,如果您希望正则表达式匹配整个URL:

 ^[^#?]+(? 

不是正则表达式,而是c#String.EndsWith方法,可以轻松完成这项工作。

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

试试这个

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