Page 1 sur 1
Mega string.
Posté : 02 mai 2006, 14:50
par freepopo
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.
Posté : 02 mai 2006, 14:53
par guilt92
Bonjour,
je te conseille de jeter un coup d oeil au
tutorialtu trouveras ton bonheur.
(regarde la fonction split)
Posté : 02 mai 2006, 15:06
par Vaedan
// 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
)
)*/
Posté : 02 mai 2006, 15:18
par freepopo
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 :
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 !
Posté : 02 mai 2006, 15:25
par Vaedan
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.
Posté : 02 mai 2006, 15:30
par freepopo
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.
Posté : 02 mai 2006, 15:36
par Vaedan
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.