Mega string.

Eléphanteau du PHP | 28 Messages

02 mai 2006, 14:50

Bonjour,
je cherche a extraire des morceaux d'une chaine de caractere.
J'aimerais savoir quelle fonction permet de lire une chaine de caractere JUSQU'A tel autre caractere.

Exemple :
25105(2;neg6*7)
Je voudrais mettre dans un tableau tab[0]=25105, tab[1]= 2 et tab[3]=neg6*7.
Il faudrait que je lise la chaine jusqu'a ce que je trouve la parenthèse ouvrante ( et ainsi de suite...

Je vous remercie par avance pour votre aide.
Enfin quelqu'un qui n'a pas de signature.

Mammouth du PHP | 1353 Messages

02 mai 2006, 14:53

Bonjour,

je te conseille de jeter un coup d oeil au tutorialtu trouveras ton bonheur.
(regarde la fonction split)

Eléphant du PHP | 493 Messages

02 mai 2006, 15:06

// Chaine de base
$str = '25105(2;neg6*7)';

// Un peu de PCRE
preg_match_all( '/([^\(;\)]+)/i', $str, $match );

// Le grand mystère
print_r( $match );

/* Affiche
Array
(
    [0] => Array
        (
            [0] => 25105
            [1] => 2
            [2] => neg6*7
        )

    [1] => Array
        (
            [0] => 25105
            [1] => 2
            [2] => neg6*7
        )
)*/

Eléphanteau du PHP | 28 Messages

02 mai 2006, 15:18

Je te remercie !

Cela semble marcher mais j'ai oublié de préciser que j'avais des suites du type de caracteres dont j'ai parlé .
exemple :

Code : Tout sélectionner

25105(2;neg6*7);25106(1;neg24*36);25108(6;neg24*36)
Séparés par des points virgules. Que faudrait-il modifier dans l'expression réguliere pour prendre cela en compte ?

PS : Pourquoi les motifs récupérés se répètent 2 fois dans le tableau comme dans ton exemple ?

Merci d'avance Vaedan !
Enfin quelqu'un qui n'a pas de signature.

Eléphant du PHP | 493 Messages

02 mai 2006, 15:25

Tout d'abord, le code que je t'ai passé devrait normalement fonctionner pour la chaine que tu viens de me montrer. Seulement tu ne nous avais pas parlé d'une récurcivité du genre xxx(xx;xx); ! Il est possible d'améliorer mon expression et c'est ce que je vais faire. Je te poste ça une fois fini.

Eléphanteau du PHP | 28 Messages

02 mai 2006, 15:30

Merci beaucoup de prendre le temps de régler mon probleme, je suis un peu gêné...
Sinon j'ai trouvé un autre solution un peu batarde en attendant, je remplace tous les "(",")" et ");" par des simple ";".
Ce qui fait que (a priori) dans mon tableau, j'ai bien les 3 chaines de caracteres qu'il me faut.
Enfin quelqu'un qui n'a pas de signature.

Eléphant du PHP | 493 Messages

02 mai 2006, 15:36

Voici le PHP :
preg_match_all( '/([0-9]{5})\(([0-9]);(neg[0-9]{1,2}\*[0-9]{1,2})\)[;]?/', $str, $match );
Maintenant j'explique !
Je pars (d'après ce que j'ai vu) du principe que le premier élément à extraire est un nombre 5 chiffres, suivi d'une parenthèse puis d'un chiffre, un point virgule, et pour finir, neg, un nombre de 1 à 2 chiffres, une étoile et encore un nombre de 1 à 2 chiffres.

Le premier code marche, celui-ci est plus strict.