Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2010, 11h34   #1
Invité de passage
 
Inscription : février 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 4
Points : 0
Points : 0
Par défaut Traiter une liste variable avec seul pattern

Bonjour,

J'ai un fichier qui contient une liste de Commandes avec Paramètres
Ceux-ci ne sont pas forcément rentré par ligne mais peuvent être une simple chaîne contenant un nombre indéfini de commande+paramètres à la suite.
Sachant que la liste de paramètres peut varier... ça fait beaucoup de chose variable, et donc de pattern qui se répètent.
Comme exemple :

Citation:
CMD1 P11 P12 P13 P14 CMD2 P21 P22 CMD1 P15 P16 CMD5 P51
Je travail en C++/Qt, mais je pense que ça ne change rien.
Je voudrais transformer ça en un tableau multiligne qui décompsera toutes les commande à la suite, et pous chaque commande donnera la liste des arguments.

Citation:
tab[CMD1][0]=P11
tab[CMD1][1]=P12
...
tab[CMD3]=liste vide
...
Je vois pas trop comment faire, j'ai essayé les répétitions avec l'outil pattern{1,} ou {1,4} mais il ne sort jamais la liste des arguments, il ne sort généralement que le dernier arguments...

Si quelqu'un peut m'aiguiller

Merci d'avance

Hervé
rv2931 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 17h48   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Une piste...

Ceci :

Code :
1
2
3
4
5
6
7
8
<?php
 
header('Content-Type: text/plain') ;
 
$s = 'CMD1 P11 P12 P13 P14 CMD23 CMD2 P21 P22 CMD1 P15 P16 CMD5 P51' ;
$pattern = '/(?:CMD\d+(?: P\d+)*)/' ;
preg_match_all($pattern, $s, $result) ;
print_r($result) ;
Donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Array
(
    [0] => Array
        (
            [0] => CMD1 P11 P12 P13 P14
            [1] => CMD23
            [2] => CMD2 P21 P22
            [3] => CMD1 P15 P16
            [4] => CMD5 P51
        )
 
)
Ce que tu devrais pouvoir traiter sans souci ;-)

Sinon j'ai aussi ceci :

Code :
$pattern = '/(?:(CMD\d+)((?: P\d+)*))/' ;
Qui donne :

Code :
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
26
27
28
29
30
Array
(
    [0] => Array
        (
            [0] => CMD1 P11 P12 P13 P14
            [1] => CMD23
            [2] => CMD2 P21 P22
            [3] => CMD1 P15 P16
            [4] => CMD5 P51
        )
 
    [1] => Array
        (
            [0] => CMD1
            [1] => CMD23
            [2] => CMD2
            [3] => CMD1
            [4] => CMD5
        )
 
    [2] => Array
        (
            [0] =>  P11 P12 P13 P14
            [1] => 
            [2] =>  P21 P22
            [3] =>  P15 P16
            [4] =>  P51
        )
 
)
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h30.


 
 
 
 
Partenaires

Hébergement Web