2010-02-19 9 views
1

Dans mon application asp.net j'ai www.site.com/rugby URL pour correspondre j'ai regexURL pour Regex extenionless

"~ /(.+)" qui fonctionne parfaitement bien. Mais si je navigue sur www.site.com/login.aspx à nouveau, regex correspond à cette expression "/(.+)".

En termes simples, je veux une regex qui ne correspond qu'à l'url extenionless. Si l'extension est présent dans l'URL, puis le faire grâce

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

Répondre

0

/([^?\.]*)(\?.*)?$ fonctionne correctement pour chacun d'entre eux:

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

La traduction de cette expression rationnelle (comme le prévoit la "Regular Expression Workbench")

/ 
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) 
1

correspond pas en fait .Net semble avoir un parseur URI que vous doit utilisation à la place. Il y a absolument pas de raison de réinventer la roue en utilisant des expressions régulières.

Vérifiez ce site pour un exemple: http://cf-bill.blogspot.com/2008/07/c-parsing-url-for-its-component-parts.html également la documentation ici: http://msdn.microsoft.com/en-us/library/system.uri.aspx

Edit: Je relire votre question et cela pourrait ne pas être ce que vous cherchez, je vous conseille d'essayer de réécrire votre question plus clairement.

0

vous pouvez essayer cette regex.

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

Il ne doit correspondre qu'à un composant de chemin et non à un fichier.

Donc, pour ces URL:

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

Les trois premiers renverrait une seule, à savoir "Shop", mais le dernier onw retournerait à la fois "Shop" et "Item"