expreg, chti problème...

expreg, chti problème... - PHP - Programmation

Marsh Posté le 12-04-2003 à 13:36:37    

Dans le cadre de la génération d'une feuille de style, je suis confronté à un chti problème :
 
en effet :
 

Code :
  1. $chaine = "color : black;"
  2. $operation = eregi("color : (.*);",$chaine,$retour);
  3. echo = $retour[1];


 
me donne bien "black".
 
par contre :
 

Code :
  1. $chaine = "font-family : Arial, Helvetica, sans-serif;"
  2. $operation = eregi("font-family : (.*),",$chaine,$retour);
  3. echo = $retour[1];


 
me donne "Arial, Helvetica" au lieu de "Arial"
 
je pense que le problème vient de la virgule... Une idée ?  :ange:


Message édité par Hermes le Messager le 12-04-2003 à 13:37:22
Reply

Marsh Posté le 12-04-2003 à 13:36:37   

Reply

Marsh Posté le 12-04-2003 à 14:54:19    

Un truc du style ca, qui marche pour toute les proprietes (enfin si je m a pas plante)

Code :
  1. if (eregi("([a-z-]+)( : )", $chaine, $retour)) {
  2. echo "Property > $retour[1]<br>";
  3. $chaine = eregi_replace("([a-z-]+)( : )", "", $chaine);
  4. $retour = preg_split("/,/", $chaine);
  5. for ($i=0; $i<count($retour); $i++) {
  6.  $retour[$i] = preg_replace("[,|;]", "", $retour[$i]);
  7.  echo "Atributes" . $i . " > " . $retour[$i] . "<br>";
  8. }
  9. }

Reply

Marsh Posté le 12-04-2003 à 15:05:32    

VisualC++ a écrit :

Un truc du style ca, qui marche pour toute les proprietes (enfin si je m a pas plante)

Code :
  1. if (eregi("([a-z-]+)( : )", $chaine, $retour)) {
  2. echo "Property > $retour[1]<br>";
  3. $chaine = eregi_replace("([a-z-]+)( : )", "", $chaine);
  4. $retour = preg_split("/,/", $chaine);
  5. for ($i=0; $i<count($retour); $i++) {
  6.  $retour[$i] = preg_replace("[,|;]", "", $retour[$i]);
  7.  echo "Atributes" . $i . " > " . $retour[$i] . "<br>";
  8. }
  9. }




 
Merci bcp, mais c'est justement ce que je cherche à éviter ;) . ma question est seulement :  
 
Peut-on délimiter une sous-chaine telle que : commence par "truc" et se termine par "," ?  [:totozzz]

Reply

Marsh Posté le 12-04-2003 à 15:14:34    

Ben c t pas clair la question :o
 

Code :
  1. "([a-z _-]+)([,|;]{0,1})"


devrait prendre un chaine de caractere (incluant l espace, _ et -) suivit ou non d'une virgule ou pt virgule (pour le dernier property)


Message édité par VisualC++ le 12-04-2003 à 15:14:54
Reply

Marsh Posté le 12-04-2003 à 15:49:00    

Ben, désolé, mais non, marche toujours pas :
 

Code :
  1. $op = eregi("([a-z _-]+)([,|;]{0,1})","font-family : Arial, Helvetica, sans-serif;",$ret);
  2. echo $ret[1];


 
donne "font-family".  
 
Moi c'est arrial que je veux...

Reply

Marsh Posté le 12-04-2003 à 17:51:02    

Euh j ai donne pour trouve vis a vis de ton premier post
 

Code :
  1. eregi("font-family : ([a-z _-]+)([,|;]{0,1})",$chaine,$retour);

Reply

Marsh Posté le 12-04-2003 à 18:57:09    

Rappel de mon premier post :
 

Citation :

par contre :
 
 
Code :
 
   
 

Code :
  1. $chaine = "font-family : Arial, Helvetica, sans-serif;" 
  2.  
  3.   $operation = eregi("font-family : (.*),",$chaine,$retour);
  4.   echo = $retour[1];


 
me donne "Arial, Helvetica" au lieu de "Arial"
 
je pense que le problème vient de la virgule... Une idée ?  


 
C'est bien le même problème dont il s'agit depuis le début.  
 
Bon, c'est pas très grave non plus, je rajouterai un traitement avec un split pour traiter mes polices, mais j'aurais bien aimé optimiser tout ça au maximum...  ;)  
 
Merci quand même pour ton aide. ;)


Message édité par Hermes le Messager le 12-04-2003 à 19:34:15
Reply

Marsh Posté le 13-04-2003 à 11:39:56    

Sans etre desagreable c dimanche :D tu fais expres de pas tester ou tu lis comme cela t enchante quand mm ....
 
Avec ton code du debut et la ligne que je t ai donnee

Code :
  1. $chaine = "font-family : Arial, Helvetica, sans-serif;";
  2. eregi("font-family : ([a-z _-]+)([,|;]{0,1})",$chaine, $retour); 
  3. echo $retour[1];


 
Ca donne Arial  :ouch:

Reply

Marsh Posté le 13-04-2003 à 14:29:44    

Citation :

By default, a quantified subpattern is "greedy", that is, it will match as many times as possible (given a particular starting location) while still allowing the rest of the pattern to match. If you want it to match the minimum number of times possible, follow the quantifier with a "?". Note that the meanings don't change, just the "greediness":  
 
   *?    Match 0 or more times  
   +?    Match 1 or more times  
   ??    Match 0 or 1 time  
   {n}?   Match exactly n times  
   {n,}?  Match at least n times  
   {n,m}? Match at least n but not more than m times  


 
 ;)  


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 13-04-2003 à 15:51:47    

VisualC++ a écrit :

Sans etre desagreable c dimanche :D tu fais expres de pas tester ou tu lis comme cela t enchante quand mm ....
 
Avec ton code du debut et la ligne que je t ai donnee

Code :
  1. $chaine = "font-family : Arial, Helvetica, sans-serif;";
  2. eregi("font-family : ([a-z _-]+)([,|;]{0,1})",$chaine, $retour); 
  3. echo $retour[1];


 
Ca donne Arial  :ouch:  


 
oopppppsss, effectivement, ça fonctionne, merci bcp, je ne sais pas ce que j'ai foutu hier, je devais être fatigué.
 
Un énorme merci ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed