Page 1 sur 1

petit problème d'expression régulière...(preg_split())

Posté : 13 févr. 2007, 16:36
par jojolapine
Bonjour à tous,
J'essaye actuellement de parser une chaine de caractère, à l'aide d'un caractère séparateur (disons '#' pour l'exemple)... seulement je veux pouvoir "protéger" ce caractère à l'aide d'un '\'...
donc voici ce que j'ai fait:
$result=preg_split("'[^\\]#'",$source);
mais celà me génère cette erreur:
Warning: preg_split() [function.preg-split]: Compilation failed: missing terminating ] for character class at offset 5 in[...]
En gros je veux dire couper la chaine en tableau à l'aide du caractère # seulement s'il n'est pas précéder d'un \...
mais je n'y parvient pas :cry:
Je m'en remet à vous...
Merci d'avance!

Posté : 13 févr. 2007, 16:56
par jojolapine
ça y est j'ai résolu tout seul, il suffisait de rajouter un 3ème \ dans l'expreg...
pourquoi ? je sais pas...

Posté : 13 févr. 2007, 17:53
par jojolapine
bopn finallement, il y a encore un problème....
Le preg_split me bouffe des valeurs...
Bon j'ai la chaine suivante:
id|int||1|1#nom|string|dupond|1|0#prenom|string|jean|1|0
si je fait ceci:
$temp=explode($this->separator,$temp[1]);
, j'obtient ceci avec mon print_r:

Code : Tout sélectionner

Array ( [0] => id|int||1|1 [1] => nom|string|dupond|1|0 [2] => prenom|string|jean|1|0 )
et si je fait
$temp=preg_split("'[^\\\]".$this->separator."'",$temp[1]);
j'obtient

Code : Tout sélectionner

Array ( [0] => id|int||1| [1] => nom|string|dupond|1| [2] => prenom|string|jean|1|0 )
en gros, le caractère juste avant $this->separator est "bouffé" par preg_split...
Ques se passe t'il docteur ?

Posté : 14 févr. 2007, 17:17
par jojolapine
bonjour à tous,
j'ai tester depuis le dernière fois pleins de masques différents... rien à faire ça ne marche pas... j'ai don codé un petit fonction, la voici:
function explode_protect($char,$str){
    $res=array();
    $j=0;
    for($i=0;$i<strlen($str);$i++){
      if($str{$i}==$char && $str{$i-1}!='\\'){
        $j++;
        $i++;
      }
      $res[$j].=$str{$i};
    }
    return $res;
  }
donc une moitiée de sujet résolue... j'arrive à faire ce que je veux... mais pas de la manière dont je le souhaitai..