Bonjour à tous, voilà j'ai une chaine "120c120" que je voudrais exploser dans un tableau qui contiendrait :
Est-ce que c'est possible ?$T[0] = 120
$T[1] = "c"
$T[2] = 120
Bonjour à tous, voilà j'ai une chaine "120c120" que je voudrais exploser dans un tableau qui contiendrait :
Est-ce que c'est possible ?$T[0] = 120
$T[1] = "c"
$T[2] = 120
Tente ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part $T = preg_split('/^(\d+)([a-z]+)(\d+)/', $str, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
si tu sait par quoi tu va le découper il suffit juste d'utiliser la fonction split() je pense.
merci bien goodpz ça fonctionne bien...
Maintenant j'ai un autre souci :
$t[0] = "103a104"
$t[1] = "101,102c101,102"la chaîne n'est pas éclatée,comment faire pour gérer les deux cas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 foreach($t as $v){ preg_split('/^(\d+)([a-z]+)(\d+)/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE); }
Ca va te sortir, selon ton exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part preg_split('/^(\d+(?:,\d+)?)([a-z]+)((?1))/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
Code X : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Array ( [0] => 103 [1] => a [2] => 104 ) et Array ( [0] => 101,102 [1] => c [2] => 101,102 )
Est-ce le format que tu souhaites ?
l'option PREG_SPLIT_DELIM_CAPTURE de preg_split indique que les captures dans l'expression ne seront pas éléminés et feront partie du résultat. tandis que les parties de l'expression n'étant pas capturés seront éléminés.Envoyé par mix_35
si le résultat attendu est
101
,
102
c
101
,
102
alors tu peux utiliser la séquence de nombres comme élément du split en capturant ces nombres. les nombres peuvent être représentés par \d dans PCRE, la séquence de 1 ou plusieurs est +, et la capture se fait par les parenthèses (). donc (\d+) veut dire de capturer toutes les séquences de nombres se répétant consécutivement 1 ou plusieurs fois.
si le résultat attendu est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 preg_split('/(\d+)/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
101
102
c
101
102
soit en éléminant les virgules, alors tu ajoutes la virgule dans l'expression sans la capturer. le caractère | veut dire OU. donc (\d+)|,+ veut dire que le split se fera sur une séquence de nombres OU sur une séquence de virgules, les nombres sont capturés donc feront partie du résultat grâce à PREG_SPLIT_DELIM_CAPTURE alors que les virgules seront éléminées puisque non capturés... pas entre parenthèses.
si le résultat attendu est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 preg_split('/(\d+)|,+/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
101,102
c
101,102
il est possible de construire sa classe avec []... avec [\d,] la nouvelle classe sera constituée des nombres et de la virgule. donc ([\d,]+) fera la capture des nombres et de la virgule en un bloc tout en étant l'élément du split.
comme tu vois, il est possible de faire beaucoup de choses avec les bases de PCRE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 preg_split('/([\d,]+)/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
Partager