Expression régulière pour reconnaître l’URL

Je veux créer un Regex pour url afin d’obtenir tous les liens de la chaîne d’entrée. Le regex devrait reconnaître les formats suivants de l’adresse URL:

  • http (s): //www.webpage.com
  • http (s): //webpage.com
  • www.webpage.com

Il y a aussi des URL plus compliquées . 2.3l5l0 & bav = on.2, ou.r_gc.r_pw. & Fp = 30a1604d4180f481 & biw = 1680 & bih = 935

J’ai le suivant

((www\.|https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*) 

mais il ne reconnaît pas le modèle suivant: www.webpage.com. Quelqu’un peut-il m’aider à créer un regex approprié?

EDIT: Cela devrait permettre de trouver un lien approprié et de placer un lien dans un index approprié comme celui-ci:

 private readonly Regex RE_URL = new Regex(@"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)", RegexOptions.Multiline); foreach (Match match in (RE_URL.Matches(new_text))) { // Copy raw ssortingng from the last position up to the match if (match.Index != last_pos) { var raw_text = new_text.Subssortingng(last_pos, match.Index - last_pos); text_block.Inlines.Add(new Run(raw_text)); } // Create a hyperlink for the match var link = new Hyperlink(new Run(match.Value)) { NavigateUri = new Uri(match.Value) }; link.Click += OnUrlClick; text_block.Inlines.Add(link); // Update the last matched position last_pos = match.Index + match.Length; } 

Je viens d’écrire un article de blog sur la reconnaissance des URL dans les formats les plus utilisés tels que:

www.google.com http://www.google.com mailto:[email protected] [email protected] www.url-with-queryssortingng.com/?url=has-queryssortingng

L’expression régulière utilisée est /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/ Cependant, je vous recommanderais de vous rendre sur http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without-the pour voir un exemple de travail complet accompagné d’une explication de l’expression régulière au cas où vous auriez besoin de l’étendre ou de la modifier.

Je ne sais pas pourquoi votre résultat dans la correspondance est seulement http:// mais j’ai nettoyé votre regex un peu

 ((?:(?:https?|ftp|gopher|telnet|file|notes|ms-help):(?://|\\\\)(?:www\.)?|www\.)[\w\d:#@%/;$()~_?\+,\-=\\.&]+) 

(?:) sont des groupes sans capture, cela signifie qu’il ne rest qu’un groupe de capture et qu’il contient la chaîne complète correspondante.

(?:(?:https?|ftp|gopher|telnet|file|notes|ms-help):(?://|\\\\)(?:www\.)?|www\.) Le lien doit maintenant commencer avec quelque chose de la première liste suivie d’un www. optionnel www. ou avec un www.

[\w\d:#@%/;$()~_?\+,\-=\\.&] J’ai ajouté une virgule à la liste (sinon votre long exemple ne correspond pas) a échappé le - (vous étiez créer une plage de caractères) et ne pas échapper à la . (pas nécessaire dans une classe de personnage.

Voir cela ici sur Regexr , un outil utile pour tester les regex.

Mais la correspondance d’URL n’est pas une tâche simple, veuillez voir cette question ici

La regex que vous donnez ne fonctionne pas pour www. parce qu’il attend un schéma d’URI (le bit avant l’URL, comme http: //). Le ‘www.’ une partie de votre expression régulière ne fonctionne pas car elle ne correspond qu’à http://www.:// (ce qui n’a pas de sens)

Essayez quelque chose comme ceci à la place:

 (((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+)|(www\.)[\w\d:#@%/;$()~_?\+-=\\\.&]*) 

Cela fera correspondre quelque chose avec un schéma d’URI valide, ou quelque chose commençant par ‘www.’