Bonjour à tous,
Je dois capturer les différents arguments passé à une fonction.
Il m'est donnée une chaine brut en argument, ex:
Le but final, est d'obtenir un tableau contenant les différents arguments, dans l'exemple ci-dessus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part $var = "\$arg1, \$arg.1, 'd'.'e', 'z', 'd,\\'e'";
- $arg1
- $arg.1
- 'd'.'e'
etc..
Pour regler le problème lié aux caractères échappés, mais aussi celui
lié au différents espaces, je me simplifie la vie en les supprimant:
N'arrivant pas à solutionner mon problème, j'ai tenté de passer par un algorithme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $var = str_replace(array("\t", "\n", "\r", "\x20"), array(), $var); $var = str_replace(array('\\\'', '\\"'), array(), $var);
Exemple d'ouput de $arg avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 $pos_b = $pos_a = 0; $arg = array(); for( $i=0; $i<strlen($var); $i++ ) { if( $var[$i] === "'" ) { if( $in ) { $in = false; $pos_a = $i+1; if( $pos_b > 0 ) $pos_b -= 1; $arg[] = substr($var, $pos_b, $pos_a-$pos_b); } else { $in = true; $pos_b = $i; } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part $var = "'xd', 'd,\\'e', '2'.'e', '3,'.\$s, 5.'e'";Les double quotes n'ont pas été pris en compte (titre d'exemple).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Array ( [0] => 'xd', [1] => ,'d,e' [2] => ,'2' [3] => .'e' [4] => ,'3,' [5] => .'e' )
Le probleme majeur reste la concaténation avec un num..
Avez-vous une solution via des regex (le fait d'etre entre des quotes m'intrigue un peu) ?
J'avais essayé de passer par preg_split("#[']?.*[^'],[^'].*[']?#U", $var), mais sans resultat =(.
Partager