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 :
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 , 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 !
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.
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.