Bonjour à tous,

Je dois capturer les différents arguments passé à une fonction.
Il m'est donnée une chaine brut en argument, ex:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$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:
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);
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
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$var = "'xd',    'd,\\'e',    '2'.'e',     '3,'.\$s,    5.'e'";
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'
)
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 =(.