正则表达式无扩展URL

时间:2010-02-19 18:51:25

标签: c# asp.net regex

在我的asp.net应用程序中,我有网址www.site.com/rugby来匹配它我有正则表达式

“〜/(.+)”完美无缺。但如果我再次导航到www.site.com/login.aspx,正则表达式匹配此表达式“/(.+)".

简单来说,我想要一个只能与extenionless url匹配的正则表达式。如果网址中存在IF扩展名,则表示感谢

<RewriterRule>
                <LookFor>~/(.+)/(.+)/(.+)/</LookFor>
                <SendTo>~/Shop/Item.aspx?cn=&1&amp;it=$2&amp;ft=$3</SendTo>
</RewriterRule>

3 个答案:

答案 0 :(得分:1)

实际上.Net似乎有一个你应该使用的内置URI解析器。绝对没有的原因是使用正则表达式重新发明轮子。

查看此网站以获取示例:http://cf-bill.blogspot.com/2008/07/c-parsing-url-for-its-component-parts.html此处的文档:http://msdn.microsoft.com/en-us/library/system.uri.aspx

编辑:我重新阅读了您的问题,这可能不是您想要的,我建议您尝试更清楚地重写您的问题。

答案 1 :(得分:0)

/([^?\.]*)(\?.*)?$适用于以下各项:

/Shop/Item.aspx?cn=&1&it=$2&ft=$3 
/Shop/Item?cn=&1&it=$2&ft=$3 
/Shop/Item.aspx
/Shop/Item

该正则表达式的翻译(由“正则表达式工作台”提供)

/
Capture
  Any character not in "?\."
  * (zero or more times)
End Capture
Capture
  ?
  . (any character)
  * (zero or more times)
End Capture
? (zero or one time)
$ (anchor to end of string)

答案 2 :(得分:0)

你可以试试这个正则表达式。

/([^?\./]*)(?![^?\./]*[?\.])

它应该只匹配路径组件而不匹配文件。

对于这些Url's:

/Shop/Item.aspx?cn=&1&it=$2&ft=$3 
/Shop/Item?cn=&1&it=$2&ft=$3 
/Shop/Item.aspx
/Shop/Item

前三个将返回一个匹配,即“Shop”,但最后一个将返回“Shop”和“Item”