Question

Je suis de consommer de l'API Twitter et que vous voulez convertir toutes les Url des liens hypertextes.

Quel est le moyen le plus efficace que vous venez de faire cela?

à partir de

string myString = "This is my tweet check it out http://tinyurl.com/blah";

pour

This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/>blah</a>
Était-ce utile?

La solution

Les expressions régulières sont probablement votre ami pour ce genre de tâche:

Regex r = new Regex(@"(https?://[^\s]+)");
myString = r.Replace(myString, "<a href=\"$1\">$1</a>");

L'expression régulière pour la mise en correspondance des URLs peuvent avoir besoin d'un peu de travail.

Autres conseils

Je l'ai fait exactement la même chose avec jquery consommer de l'API JSON voici la linkify fonction:

String.prototype.linkify = function() {
    return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
        return m.link(m);
    });
 };

C'est effectivement un problème de l'horrible.Url peut contenir (et avec) la ponctuation, de sorte qu'il peut être difficile de déterminer où une URL se termine effectivement, quand il est incorporé dans le texte normal.Par exemple:

http://example.com/.

est une URL valide, mais il pourrait tout aussi bien être la fin d'une phrase:

I buy all my witty T-shirts from http://example.com/.

Vous ne pouvez pas simplement analyser jusqu'à ce qu'un espace est trouvé, parce que vous allez garder de la période dans le cadre de l'URL.Vous aussi vous ne pouvez pas simplement analyser jusqu'à une période ou des un espace est trouvé, parce que les périodes sont extrêmement fréquentes dans les Url.

Oui, la regex est votre ami ici, mais de la construction de l'appropriées regex est la partie la plus difficile.

Découvrez la présente ainsi: L'expansion des Url avec des Regex dans .NET.

Vous pouvez ajouter un peu plus de contrôle sur ce en utilisant MatchEvaluator fonction de délégué à l'expression régulière:supposons que j'ai cette chaîne:

find more on http://www.stackoverflow.com 

maintenant, essayez ce code

private void ModifyString()
{
    string input = "find more on http://www.authorcode.com ";
                Regex regx = new Regex(@"\b((http|https|ftp|mailto)://)?(www.)+[\w-]+(/[\w- ./?%&=]*)?");
                string result = regx.Replace(input, new MatchEvaluator(ReplaceURl));
}

static string ReplaceURl(Match m)
{
    string x = m.ToString();
    x = "< a href=\"" + x + "\">" + x + "</a>";
    return x;
}

/cheer pour RedWolves

de:c'.replace(/[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/.=]+/, fonction(m){...

voir:/[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/.=]+/

Il y a le code pour avoir les adresses "anyprotocol"://"anysubdomain/domaine"."anydomainextension et de l'adresse",

et c'est un parfait exemple pour d'autres utilisations de la manipulation de la chaîne.vous pouvez couper et découper à volonté avec .remplacer et insérer "a href"s en cas de besoin.

J'ai utilisé jQuery pour modifier les attributs de ces liens à "target=_blank" facilement dans le contenu de mon chargement de la logique, même si l' .lien de la méthode ne permet pas de les personnaliser.

Personnellement, j'aime la clouant sur une méthode personnalisée à l'objet string à la volée de la chaîne de filtrage (la Chaîne.le prototype.linkify déclaration), mais je ne suis pas sûr de comment cela pourrait se jouer dans un environnement à grande échelle où vous auriez à organiser 10+ personnalisé linkify fonctions similaires.Je pense que vous auriez certainement avoir quelque chose à faire d'autre avec votre code structure à ce point.

Peut-être un vétérinaire sera trébucher le long d'ici et de nous éclairer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top