Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 30-06-2005 06:38:22

Overflow
Membre
Date d'inscription: 10-10-2004
Messages: 4

Expressions régulières PHP

Bonjour à tous,


j'ai un ptit problème avec ces grogneugneux d'expressions régulières.
Je m'explique :
je souhaiterais récupérer des chaines contenues dans des titres de pages web, par exemple :

Code:

<title>Asus A8N-E : Cartes m&egrave;res : Comparer les prix - Matbe.com</title>
<title>AMD Athlon 64 3000+ (1800 Mhz - s939) 0.09&micro; BOX : Processeurs : Comparer les prix - Matbe.com</title>
<title>MSI GeForce NX6600GT-TD128E : Cartes graphiques : Comparer les prix - Matbe.com</title>

Avec les fonctions ereg(), eregi() ou preg_match() je n'ai aucune difficulté à récupérer tout ce qui est contenu entre <title> et </title>.

Code:

if(!($fp = fopen($url, 'r')))
   echo 'Impossible d\'accéder à la page';
else
{
   $content = fread($fp, 10000);
   fclose($fp);
   $nom =eregi("<title>(.*)</title>",$content,$regs);
   echo $regs[1];
}

Ca c'est no problemo ca marche.
Seulement je souhaiterais récupérer seulement ce qui est contenu entre la balise <title> et les premiers ":" rencontrés. Le problème étant qu'il y a 2 ":" entre les balises <title> et </title>.
Avec le code suivant,

Code:

if(!($fp = fopen($url, 'r')))
   echo 'Impossible d\'accéder à la page';
else
{
   $content = fread($fp, 10000);
   fclose($fp);
   $nom =eregi("<title>(.*):",$content,$regs);
   echo $regs[1];
}

la chaine que je récupère est tronquée au niveau du deuxième ":"...
Par exmple sur ce titre : <title>Asus A8N-E : Cartes m&egrave;res : Comparer les prix - Matbe.com</title>
j'obtiens Asus A8N-E : Cartes mères.
Si maintenant je remplace le titre précédent par <title>Asus A8N-E : Cartes m&egrave;res Comparer les prix - Matbe.com</title> (suppression du deuxième ":")
j'obtiens Asus A8N-E ce qui est exactement ce qu'il me faut...

Comment faire pour obtenir la chaine contenue entre <title> et les premiers ":"....

Merci d'avance.

Dernière modification par Overflow (30-06-2005 07:42:28)

Hors ligne

 

#2 30-06-2005 07:14:17

kazhar
Ex-Webmaster
Lieu: Orléans
Date d'inscription: 25-06-2004
Messages: 3381
Site web

Re: Expressions régulières PHP

bizoo toi smile

si tu a toujours deux : tu dois pouvoir faire ca :

Code:

$nom =eregi("<title>(.*):(.*):(.*)",$content,$regs);

ou la premiere entrée de $regs devrait etre la partie avant le premier :

(je suis désolé de pas y avoir pensé sur msn hmm )

Hors ligne

 

#3 30-06-2005 07:33:27

Overflow
Membre
Date d'inscription: 10-10-2004
Messages: 4

Re: Expressions régulières PHP

za marcheeeee merci mon ptit kazarounet lol !! j'suis tro bete, j'avais pensé a ca :

Code:

$nom =eregi("<title>(.*):(.*)</title>",$content,$regs);

mais pas a ce que viens de me dire !!


merki !!


(tu mfra pensé quand on svera, a paris j'ai pris une foto d'une enseigne qui te fera rire lol !)

Dernière modification par Overflow (30-06-2005 07:42:42)

Hors ligne

 

#4 30-06-2005 07:37:43

kazhar
Ex-Webmaster
Lieu: Orléans
Date d'inscription: 25-06-2004
Messages: 3381
Site web

Re: Expressions régulières PHP

mais, de rien wink
no pb. je fait pas la rando demain, j'ai une soirée

nb : c'esr eregi, pas ergi hein wink (ergi n'existe pas, ca m'etonne que tu ait pas d'erreur...)

Hors ligne

 

#5 30-06-2005 07:42:57

Overflow
Membre
Date d'inscription: 10-10-2004
Messages: 4

Re: Expressions régulières PHP

dsl c'était une erreur en recopiant le code.

Hors ligne