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

Eléphanteau du PHP | 14 Messages

04 juin 2009, 16:22

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 !

Eléphant du PHP | 217 Messages

04 juin 2009, 18:45

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 /?)

Eléphanteau du PHP | 14 Messages

05 juin 2009, 09:17

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 ...