2009-08-24 7 views
8

J'ai trouvé de nombreux exemples de la façon de faire correspondre des types particuliers d'URL en PHP et dans d'autres langages. Je dois faire correspondre n'importe quelle URL de mon application C#. Comment faire ça? Quand je parle d'URL, je parle de liens vers des sites ou des fichiers sur des sites et des sous-répertoires et ainsi de suite.Comment faire correspondre l'URL dans C#?

J'ai un texte comme ceci: "Allez à mon site Web awsome http: \ www.google.pl \ quelque chose \ blah \? Lang = 5" ou sinon et je dois obtenir ce lien de ce message. Les liens peuvent commencer seulement avec www. aussi.

+0

On peut supposer que vous vouliez dire d'utiliser des barres obliques parce que vous ne correspondra jamais à des URL avec antislashs puisque vous confondez Microsoft \ Windows Land et Unix/WWW Land. –

Répondre

14

Si vous devez tester votre regex pour trouver les URL que vous pouvez essayer cette ressource

http://gskinner.com/RegExr/

Il testera votre regex en vous écrivant.

En C#, vous pouvez utiliser regex par exemple comme ci-dessous:

Regex r = new Regex(@"(?<Protocol>\w+):\/\/(?<Domain>[\[email protected]][\w.:@]+)\/?[\w\.?=%&=\[email protected]/$,]*"); 
// Match the regular expression pattern against a text string. 
Match m = r.Match(text); 
while (m.Success) 
{ 
    //do things with your matching text 
    m = m.NextMatch(); 
} 
+2

+1: bien que vous ayez oublié d'ajouter le symbole @ devant la chaîne. –

+0

Celui-ci échoue avec ceci: 'http: // http: //www.test.com/' – Rumplin

+0

@Rumplin: pouvez-vous expliquer l'erreur que vous obtenez? si j'essaye avec gskinner, l'expression rationnelle correspond correctement à http://www.test.com/ ou avez-vous l'intention d'utiliser la chaîne avec le ''? – michele

5

Je ne sais pas exactement ce que vous demandez, mais un bon début serait la classe Uri, qui va analyser l'URL pour vous.

+0

Cela pourrait être plus spécifique: par exemple: var myUri = null; Uri.TryCreate (str, UriKind.Absolute, sur myVar); et vérifiez si myUri est passé de null à null. –

1
Regex regx = new Regex("http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase); 
14

Microsoft a une belle page de quelques expressions régulières ... c'est ce qu'ils disent (fonctionne très bien aussi)

^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$ 

http://msdn.microsoft.com/en-us/library/ff650303.aspx#paght000001_commonregularexpressions

+0

bonne ressource, merci Chuck –

+3

n'inclut pas la chaîne de requête derrière l'URL. il s'arrête à la première lettre '='. Pour corriger, il suffit d'ajouter le seul caractère '=' afin qu'il se termine comme ceci ".... &% \ $ # _ =] *)? $". En outre, ce modèle regex ne trouvera pas d'URL dans la chaîne. Cela vous dira seulement que la chaîne est une url ou non. Pour le trouver, ommit "^" au début et "$" à la fin. Regex.Matches (texte, modèle) devrait alors retourner toutes les URL dans le texte. – Wolf5

+0

Inclut-il les URL mailto? – user

Questions connexes