Bonjour à tous,
Je dois capturer les différents arguments passé à une fonction.
Il m'est donnée une chaine brut en argument, ex:
$var = "\$arg1, \$arg.1, 'd'.'e', 'z', 'd,\\'e'";
Le but final, est d'obtenir un tableau contenant les différents arguments, dans l'exemple ci-dessus:
- $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:
1 2
| $var = str_replace(array("\t", "\n", "\r", "\x20"), array(), $var);
$var = str_replace(array('\\\'', '\\"'), array(), $var); |
N'arrivant pas à solutionner mon problème, j'ai tenté de passer par un algorithme:
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;
}
}
} |
Exemple d'ouput de $arg avec:
$var = "'xd', 'd,\\'e', '2'.'e', '3,'.\$s, 5.'e'";
1 2 3 4 5 6 7 8 9
| Array
(
[0] => 'xd',
[1] => ,'d,e'
[2] => ,'2'
[3] => .'e'
[4] => ,'3,'
[5] => .'e'
) |
Les double quotes n'ont pas été pris en compte (titre d'exemple).
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