154 votes

Expression régulière pour trouver des URL dans une chaîne de caractères

Quelqu'un connaît-il une expression régulière que je pourrais utiliser pour trouver des URL dans une chaîne de caractères ? J'ai trouvé beaucoup d'expressions régulières sur Google pour déterminer si une chaîne entière est une URL, mais j'ai besoin de pouvoir rechercher des URL dans une chaîne entière. Par exemple, j'aimerais pouvoir trouver www.google.com y http://yahoo.com dans la chaîne suivante :

Hello www.google.com World http://yahoo.com

Je ne recherche pas d'URL spécifiques dans la chaîne. Je recherche TOUTES les URL de la chaîne, c'est pourquoi j'ai besoin d'une expression régulière.

9voto

zhilevan Points 782

Je pense que ce modèle de regex gère précisément ce que vous voulez

/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/

et voici un exemple de snippet pour extraire les Urls :

// The Regular Expression filter
$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

// The Text you want to filter for urls
$text = "The text you want  https://stackoverflow.com/questions/6038061/regular-expression-to-find-urls-within-a-string to filter goes here.";

// Check if there is a url in the text
preg_match_all($reg_exUrl, $text, $url,$matches);
var_dump($matches);

8voto

Zarathos Points 3417

Si vous devez être strict sur la sélection des liens, j'opterais pour :

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

Pour plus d'informations, lisez ceci :

Un motif Regex libéral amélioré et précis pour faire correspondre les URLs

7voto

Duc Filan Points 3147

Toutes les réponses ci-dessus ne correspondent pas aux caractères Unicode de l'URL, par exemple : http://google.com?query=đức+filan+đã+search

Pour la solution, celle-ci devrait fonctionner :

(ftp:\/\/|www\.|https?:\/\/){1}[a-zA-Z0-9u00a1-\uffff0-]{2,}\.[a-zA-Z0-9u00a1-\uffff0-]{2,}(\S*)

6voto

aditya Points 79

J'ai utilisé l'expression régulière ci-dessous pour trouver l'URL dans une chaîne de caractères :

/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/

6voto

Thilanka Bowala Points 51

J'ai trouvé cette qui couvre la plupart des exemples de liens, y compris les parties de sous-répertoire.

Regex est :

(?:(?:https?|ftp):\/\/|\b(?:[a-z\d]+\.))(?:(?:[^\s()<>]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))?\))+(?:\((?:[^\s()<>]+|(?:\(?:[^\s()<>]+\)))?\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X