Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/02/2008, 14h18   #1
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 54
Points : 17
Points : 17
Par défaut Problème avec une expression réguliere

Bonjour a tous , j'ai un probleme avec un expression réguliere :

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ch = curl_init(); 
$timeout = 5; // set to zero for no timeout 
curl_setopt ($ch, CURLOPT_URL, 'www.monsiteWeb.com'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$file_contents = curl_exec($ch); 
curl_close($ch); 
$lines = array(); 
$lines = explode("\n", $file_contents); 
 
// affichage ligne par ligne
foreach($lines as $line_num => $line) { 
//echo " ".htmlspecialchars($line)."<br />\n"; 
 
$src = $line;
preg_match_all("#<div class=\"numero\">(.*)</div>#Us",$src,$split);
 
 
 
	for($i=0;$i<count($split[0]);$i++){
 
		echo  $split[0][$i]."<br>";
		}
}
Le résultat de mon expression est la suivante :
5
2
55
221
45
857
554
1125
221
1
21

Je voudrai moi tout simplement afficher les 4 premiers numéro et pas les autres.

Voila j'espere que quelqu'un pourra m'aider

merci
figatelliSTI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 14h22   #2
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Ce n'est pas ton expression régulière qui a un problème alors, mais ta boucle.

Au lieu de faire :
Code :
for($i=0;$i<count($split[0]);$i++){
fais :
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 14h30   #3
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 54
Points : 17
Points : 17
et non ça ne marche pas ceci.
ça me met l'erreur suivante :
Citation:
Notice: Undefined offset: 0 in c:\program files\easyphp1-8\www\code php\test.php on line 25


Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\code php\test.php on line 25


Notice: Undefined offset: 2 in c:\program files\easyphp1-8\www\code php\test.php on line 25


Notice: Undefined offset: 3 in c:\program files\easyphp1-8\www\code php\test.php on line 25
En faite je pense que l'erreur vient du fait qu'il y a plusieurs div qui s'appellent "numero".
Il faudrait que j'arrive à ce moment là, à juste afficher le 1er div trouvé et ainsi ça m'affichera les 4 premiers chiffres.
figatelliSTI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 18h14   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Pourquoi scinder le code de la page et utiliser l'option s dans votre expression régulière ?

S'il n'y a pas au moins quatre éléments div satisfaisant le motif par ligne, il deviendra nécessaire de faire intervenir un compteur pour se limiter à ces quatres premiers div. A moins de faire "plus direct" :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$ch = curl_init(); 
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, 'www.monsiteWeb.com'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$file_contents = curl_exec($ch); 
curl_close($ch); 
 
$nb = preg_match_all("#<div class=\"numero\">(.*)</div>#Us", $file_contents, $split);
for ($i = 0; $i < min($nb, 4); $i++) {
    echo $split[0][$i]; // Si vous n'utilisez que la correspondance sur le motif, alors la parenthèse capturante n'est pas utile
}
(non testé)

Enfin, si j'ai bien compris votre demande (vous parliez ci-dessus des quatre premiers chiffres ...)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 09h59   #5
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 54
Points : 17
Points : 17
Merci beaucoup ca marche
figatelliSTI est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h09.


 
 
 
 
Partenaires

Hébergement Web