我需要测试一个网址不以.asp
结尾
所以test
,test.html
和test.aspx
应匹配,但test.asp
不匹配。
通常你会测试网址是否以.asp结尾,并在代码中使用NOT运算符来判断它匹配的事实:
if(!regex.IsMatch(url)) { // Do something }
在这种情况下,正则表达式将是\.asp$
但在这种情况下我需要正则表达式来产生匹配。
背景:我需要在ASP.NET MVC RouteCollection.MapRoute
扩展方法中使用正则表达式作为路由约束。路由需要匹配所有控制器,但是当url中的控制器以.asp
答案 0 :(得分:40)
诀窍是使用negative lookbehind。
如果您只需要一个是/否答案:
(?<!\.asp)$
如果您需要匹配整个网址:
^.*(?<!\.asp)$
这些正则表达式适用于URL末尾出现文件名的任何URL(即没有查询或片段的URL)。我假设您的网址符合此限制,因为您的问题中包含正则表达式.asp $。如果您希望它与所有网址一起使用,请尝试以下操作:
^[^#?]+(?<!\.asp)([#?]|$)
或者,如果您希望正则表达式匹配整个URL:
^[^#?]+(?<!\.asp)([#?].+|$)
答案 1 :(得分:3)
不是正则表达式,而是c#String.EndsWith方法,可以轻松完成这项工作。
即
string test1 = "me.asp" ;
string test2 = "me.aspx" ;
test1.EndsWith(".asp") // true;
test2.EndsWith(".asp") // false ;
答案 2 :(得分:2)
试试这个
^((?!\.asp$).)*$