[PHP] Problème de regex

Résolu/Fermé
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 - 5 nov. 2008 à 15:02
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 - 5 nov. 2008 à 15:53
Bonjour à toute la communauté :)

J'ai un soucis de Regex:
Je récupère une chaine de caractère dans une variable correspondant à la réponse de
error_reporting(E_ALL);
$cmd = 'ping '.$_SERVER['SERVER_NAME'].' -c 1';
$handle = popen("$cmd 2>&1", 'r');
$read = fread($handle, 2096);
pclose($handle);
jusque là, pas de soucis, voici l'echo de $read:
"PING mon-site.com (55.60.231.14) 56(84) bytes of data. 64 bytes from ALyon-262-1-17-210.w82-27.abo.free.fr (55.60.231.14): icmp_seq=1 ttl=64 time=3.02 ms --- mon-site.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, ...... "
J'ai essayé plusieur regex mais je n'arrive pas a récupéré l'ip (entre parenthèse).
voici celle qui s'en raproche le plus pour le moment:
$ip = preg_replace("#[a-zA-Z]+ \((.+)\) [a-zA-Z]+ #", "$1", $read);
Déjà la ça marche pas, et je comprends pas pourquoi ^^
Sinon, plutot que de suprimer tout les caractères que je ne veux pas, y'a til un moyen de seulement recuperer ceux que je veux ? genre:
preg_recup('#\([0-9]{3,}\.[0-9]{3,}\.[0-9]{3,}\)#', $read);
Merci d'avance :)
A voir également:

1 réponse

xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
5 nov. 2008 à 15:53
Nan bah c'est bon j'ai réussis à m'en sortir.
Pour ceux que ça intéresse voici le script:
(remplacer $_SERVER['SERVER_NAME'] par n'importe quel URL

error_reporting(E_ALL);
$cmd = 'ping '.$_SERVER['SERVER_NAME'].' -c 1';
$handle = popen("$cmd 2>&1", 'r');
$read = fread($handle, 2096);
pclose($handle);
$ip = preg_replace('#[a-zA-Z0-9\.\- ]*\((.+)\)#i', '$1', $read);
$ip = preg_replace('#(.+)\)[a-zA-Z0-9 \(\.:_%=\-,/
]*#i', '$1', $ip);

/!\ Pensez à mètre la fin de la seconde regex à la ligne suivante comme ci-dessus: cela permet de supprimer les /n (retour a la ligne)

Dans mon cas ce script sert a récupérer l'adresse public (internet) de mon serveur, et non mon adresse privée (locale) comme le faisait $_SERVER['REMOTE_ADDR'].
0