web-dev-qa-db-fra.com

Modèle d'expression régulière C # pour extraire les URL de la chaîne donnée - pas les URL html complètes mais aussi les liens nus

J'ai besoin d'une expression régulière qui fera ce qui suit

Extract all strings which starts with http://
Extract all strings which starts with www.

J'ai donc besoin d'extraire ces 2.

Par exemple, il y a ce texte de chaîne donné ci-dessous

house home go www.monstermmorpg.com Nice hospital http://www.monstermmorpg.com this is incorrect url http://www.monstermmorpg.commerged continue

Donc, à partir de la chaîne ci-dessus, j'obtiendrai

    www.monstermmorpg.com
http://www.monstermmorpg.com
http://www.monstermmorpg.commerged

Vous recherchez regex ou une autre façon. Je vous remercie.

C # 4.0

29
MonsterMMORPG

Vous pouvez écrire quelques expressions régulières assez simples pour gérer cela, ou passer par la méthodologie de fractionnement de chaînes plus traditionnelle + LINQ.

Regex

var linkParser = new Regex(@"\b(?:https?://|www\.)\S+\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
var rawString = "house home go www.monstermmorpg.com Nice hospital http://www.monstermmorpg.com this is incorrect url http://www.monstermmorpg.commerged continue";
foreach(Match m in linkParser.Matches(rawString))
    MessageBox.Show(m.Value);

Explication Motif:

\b       -matches a Word boundary (spaces, periods..etc)
(?:      -define the beginning of a group, the ?: specifies not to capture the data within this group.
https?://  - Match http or https (the '?' after the "s" makes it optional)
|        -OR
www\.    -literal string, match www. (the \. means a literal ".")
)        -end group
\S+      -match a series of non-whitespace characters.
\b       -match the closing Word boundary.

Fondamentalement, le modèle recherche les chaînes qui commencent par http:// OR https:// OR www. (?:https?://|www\.), puis correspondent à tous les caractères jusqu'au prochain espace blanc.

Options de chaînes traditionnelles

var rawString = "house home go www.monstermmorpg.com Nice hospital http://www.monstermmorpg.com this is incorrect url http://www.monstermmorpg.commerged continue";
var links = rawString.Split("\t\n ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Where(s => s.StartsWith("http://") || s.StartsWith("www.") || s.StartsWith("https://"));
foreach (string s in links)
    MessageBox.Show(s);
75
Jason Larke