首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式与不以1+(扩展名)结尾的字符串( .ext字符)匹配

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

Stack Overflow用户
提问于 2008-11-27 13:00:31
回答 3查看 14.8K关注 0票数 13

我需要测试一个url,它的并没有以.asp结束

因此,test、test.html和test.aspx应该匹配,而test.asp不应该匹配。

通常,您将测试url 是否以.asp结尾,并否定使用代码中的NOT运算符进行匹配的事实:

代码语言:javascript
复制
if(!regex.IsMatch(url)) { // Do something }

在这种情况下,正则表达式将是\.asp$,但在本例中,我需要正则表达式才能得到匹配。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-27 13:23:35

诀窍是使用负后视。

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

代码语言:javascript
复制
(?<!\.asp)$

如果您需要匹配整个URL:

代码语言:javascript
复制
^.*(?<!\.asp)$

这些regexe将处理在URL末尾出现文件名的任何URL (即没有查询或片段的URL)。考虑到问题中的regex .asp$,我假设您的URL符合这个限制。如果您想让它与所有URL一起工作,请尝试如下:

代码语言:javascript
复制
^[^#?]+(?<!\.asp)([#?]|$)

如果希望regex与整个URL匹配,请使用以下内容:

代码语言:javascript
复制
^[^#?]+(?<!\.asp)([#?].+|$)
票数 40
EN

Stack Overflow用户

发布于 2008-11-27 13:39:57

不是regexp,而是c# String.EndsWith方法,它可以轻松地完成任务。

即

代码语言:javascript
复制
string test1 = "me.asp" ;
string test2 = "me.aspx" ;

test1.EndsWith(".asp") // true;
test2.EndsWith(".asp") // false ;
票数 3
EN

Stack Overflow用户

发布于 2008-11-27 13:10:23

尝尝这个

代码语言:javascript
复制
^((?!\.asp$).)*$
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/323697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档