Expressions rationnelles : c'est moi ou ça bug ? :D

Répondre
kronemburg
kronemburg
Déconnecté
Kro kro kro kronemburg
Salut tout le monde !
Voilà, j'utilise l'expression rationnelle suivante et j'ai pu constater quelque chose d'étrange, qui peut être genant (qui m'a fait perdre 30 minutes par exemple !)
Cette expression rationnelle permet de trier les elements d'un fichier css
code fonctionnant à merveille :
  1. $j=0;
  2. while(eregi('([[:alnum:]|*|-]+):([[:alnum:]|-| |#]+);',$reg[2],$re)==true)
  3. {
  4.    $reg[2] = str_replace($re[0],'',$reg[2]);
  5.    $balises[$reg[1]][$j]['attributs'] = $re[1];
  6.    $balises[$reg[1]][$j]['valeur'] = $re[2];
  7.    $j++;
  8. }
  9. unset($j,$reg,$re);
  10. // Lorsque la boucle tombe sur l'attribut font-size, pas de problème :
  11. // $balises[$reg[1]][$j]['attributs'] = font-size; 

code bugant ou plutot mal codé smiley :
  1. $j=0;
  2. while(eregi('([[:alnum:]|-|*]+):([[:alnum:]|-| |#]+);',$reg[2],$re)==true) // <== Notez la nuance
  3. { // ([[:alnum:]|-|*]+) au lieu de ([[:alnum:]|*|-]+)
  4.    $reg[2] = str_replace($re[0],'',$reg[2]);
  5.    $balises[$reg[1]][$j]['attributs'] = $re[1];
  6.    $balises[$reg[1]][$j]['valeur'] = $re[2];
  7.    $j++;
  8. }
  9. unset($j,$reg,$re);
  10. // La par contre :
  11. // $balises[$reg[1]][$j]['attributs'] = size; 


Donc voilà. Ma curiosité m'a poussé à faire ce post smiley, pour savoir si oui ou non c'est un bug, peu être une faille qui fait que l'étoile n'est pas considérée comme échapée...
Merci !smiley
zebden
zebden
Déconnecté
zebdinou pour les intimes / Blog : http://www.zebden.fr
Lu,

C'est pas l'étoile qui pose problème mais ton tiret qui entre parenthèse définit un range, faut soit l'échapper, soit le mettre à la fin.

Ensuite ton ou avec | est faux, il sera pris comme le caractère | et non pour le ou, ou alors toi tu considère le | comme un caractère d'echappement, ce qui est faux puisque c'est l'antislash.

Donc ca donnerait ceci :

([[:alnum:]*-]+) alpahanum + étoile + tiret.
LupusMic
LupusMic
Déconnecté
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Zebden a bien résumé la situation. Ce qu'on peut ajouter, c'est que pour mettre au point ces regex il faut s'équiper d'un logiciel qui compare en live la regex à une chaîne type.

Il existe des programmes qui font ça tout seul, mais aussi des extension pour Firefox.
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog