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

Répondre
kronemburg
le 02/08/2006 à 02:36
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 :
$j=0;
while(eregi('([[:alnum:]|*|-]+):([[:alnum:]|-| |#]+);',$reg[2],$re)==true)
{
$reg[2] = str_replace($re[0],'',$reg[2]);
$balises[$reg[1]][$j]['attributs'] = $re[1];
$balises[$reg[1]][$j]['valeur'] = $re[2];
$j++;
}
unset($j,$reg,$re);
// Lorsque la boucle tombe sur l'attribut font-size, pas de problème :
// $balises[$reg[1]][$j]['attributs'] = font-size;

code bugant ou plutot mal codé smiley :
$j=0;
while(eregi('([[:alnum:]|-|*]+):([[:alnum:]|-| |#]+);',$reg[2],$re)==true) // <== Notez la nuance
{ // ([[:alnum:]|-|*]+) au lieu de ([[:alnum:]|*|-]+)
$reg[2] = str_replace($re[0],'',$reg[2]);
$balises[$reg[1]][$j]['attributs'] = $re[1];
$balises[$reg[1]][$j]['valeur'] = $re[2];
$j++;
}
unset($j,$reg,$re);
// La par contre :
// $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
Kro kro kro kronemburg
zebden
le 02/08/2006 à 08:54
zebden
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.
zebdinou pour les intimes / Blog : http://www.zebden.fr
LupusMic
le 02/08/2006 à 08:57
LupusMic
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.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours