Page 1 sur 1

Expression régulière : trouver des URL avec preg_match_all

Posté : 04 juin 2009, 16:22
par webaida
Bonjour,

j'aimerais utiliser preg_match_all sur un fichier texte chargé en chaine de caractères et trouver les URL contenues dans ce fichier.

Les URL ne sont pas forcément "standardisées" et peuvent aussi bien être

http://www.roberto.com
www.roberto.com
http://roberto.com
www.roberto.com/test.php?tutu=tata&toto=titi
etc.

J'ai trouvé un pattern que j'ai modifié qui me fait ça :

Code : Tout sélectionner

((http|https|ftp)\://)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*
Ca fonctionne avec ereg() ... mais pas avec preg_match_all() qui me donne le warning suivant :

Code : Tout sélectionner

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '?'
Je ne m'y connais pas suffisement en Expressions régulières pour savoir dans quel sens aller ...
Une idée ?

Merci !

Posté : 04 juin 2009, 18:45
par mojorisin
Bonjour,
si vous utiliser le / comme délimiteur de regexp il vous faut alors les échapper.
Vu le nombre de slash dasn votre regexp utlisez d'autre délimiteur (le probleme que vous rencontrez vien je pense de la séquence /?)

Posté : 05 juin 2009, 09:17
par webaida
Bonjour,

comment choisir un autre délimiteur ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Edit :

J'ai apparement réussi :
le pattern pour preg_match_all() :

Code : Tout sélectionner

$pattern = "/((http|https|ftp)\:\/\/)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?\/([a-zA-Z0-9\-\.\?_&%\$#\=~\/\'\,])*/";
Si vous voyez une amélioration possible ...