2009-09-07 7 views
1

En C#, comment pourrais-je capturer la valeur entière dans l'URL comme:d'expression rationnelle pour un motif URL spécifique

/someBlah/a/3434/b/232/999.aspx 

J'ai besoin pour obtenir la valeur 999 de l'URL ci-dessus. L'URL doit contenir le /someBlah/. Toutes les autres valeurs comme a/3434/b/232/ peuvent être n'importe quel caractère/numéro.

Est-ce que je peux m'échapper pour le '/'?

Répondre

4

Effectuez les opérations suivantes

var match = Regex.Match(url,"^http://.*someblah.*\/(\w+).aspx$"); 
if (match.Success) { 
    string name = match.Groups[1].Value; 
} 

Vous n'avez pas spécifié quels noms pourraient apparaître devant le fichier ASPX. J'ai pris l'approche simple d'utiliser le caractère regex \w qui correspond à des lettres et chiffres. Vous pouvez le modifier si nécessaire pour inclure d'autres éléments.

1
^(?:.+/)*(?:.+)?/someBlah/(?:.+/)*(.+)\.aspx$ 

C'est un peu exhaustif, mais il peut gérer des scénarios où/someBlah/n'a pas à être au début de la chaîne.

L'opérateur?: Implique un groupe non-capturant, qui peut être pris en charge ou non par votre arôme RegEx.

3

Vous obtenez effectivement le nom de fichier sans extension.

Bien que vous a demandé spécifiquement pour une expression régulière, à moins que vous êtes dans un scénario où vous avez vraiment besoin d'utiliser un, je vous recommande d'utiliser System.IO.Path.GetFileNameWithoutExtension:


Path.GetFileNameWithoutExtension(Context.Request.FilePath) 
+0

mais il doit correspondre à un modèle donné, je ne veux pas modifier toutes les URL. – mrblah

+0

** Ma solution ne vous oblige pas à modifier les URL. ** Tout ce qu'il fait est de vous renvoyer le nom du fichier indépendamment de la correspondance d'une expression régulière ou non. Si vous souhaitez que le fichier corresponde à une expression régulière, vous pouvez appliquer le filtre uniquement au nom de fichier au lieu de l'URL complète. –

1
Regex regex = new Regex("^http://.*someBlah.*/(\\d+).aspx$"); 
Match match = regex.Match(url); 
int result; 
if (match.Success) 
{ 
    int.TryParse(match.Groups[1].Value, out result); 
} 

L'utilisation de \ d plutôt que \ w garantit que vous ne faites correspondre que les chiffres, et à moins que l'indicateur de cas d'ignorance ne soit défini, la capitalisation de someBlah doit être correcte.

Questions connexes