|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Membre du Club
![]() |
Bonjour,
Voilà, j'ai essayé de mettre en place une expression régulière me permettant de sortir des arguments dans une chaine de caractères : Ma chaine type : Code :
<!-- DESIGNATION commande1="valeur1" commande2="valeur2" ... --> Code :
preg_match("#<!-- (.*?) (.*?=.*?) -->#",$value,$matches); donc comment puis-je attraper mes commandes séparément ? de manière à ce que mon tableau $matches sépare bien toutes les commandes ? Merci pour votre aide ^^ |
|
|
|
|
|
#2 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: août 2004
Messages: 452
|
Bonjour,
est-ce que par hasard le terme de 'commande' serait invariable ? Si c'est le cas il faudrait faire un masque plus "restreint"
__________________
Règle n°1 du forum francophone : Parler le français... Pas de question technique par MP, le forum est fait pour çà, merci. |
|
|
|
|
|
#3 (permalink) | |
|
Membre du Club
![]() |
Citation:
le but est de récupérer des paramètres qui peuvent être dans ma balise au nombre de 0, 1, 2 etc ... avec des valeurs différentes. |
|
|
|
|
|
|
#4 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: août 2004
Messages: 452
|
Et je suppose qu'un explode sur les espaces ne conviendrait pas, puisque tes valeurs peuvent en contenir ?
__________________
Règle n°1 du forum francophone : Parler le français... Pas de question technique par MP, le forum est fait pour çà, merci. |
|
|
|
|
|
#6 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: août 2004
Messages: 452
|
Voui mais entre minables on se sent un peu moins seuls
![]() Essaye çà Code :
$masque = '#[^\s]+=".*?"#';
__________________
Règle n°1 du forum francophone : Parler le français... Pas de question technique par MP, le forum est fait pour çà, merci. |
|
|
|
|
|
#7 (permalink) |
|
Membre du Club
![]() |
ça ne fonctionne pas ... car ça me parse n'importe quelle chaine...
j'ai modifié comme ça : Code :
elseif(preg_match_all('#<!-- (.*?) ([^\s]+=".*?") -->#',$value,$matches)) Voici le retour du preg_match_all : Code :
array(3) { [0]=> array(1) { [0]=> string(59) "<!-- MABOUCLE commande="variable" commande2="variable2" -->" } [1]=> array(1) { [0]=> string(8) "MABOUCLE" } [2]=> array(1) { [0]=> string(41) "commande="variable" commande2="variable2"" } } |
|
|
|
|
|
#9 (permalink) |
|
Membre du Club
![]() |
voici ma classe :
Code :
class templatePattern { protected $pattern; public function __construct($file) { $this->pattern = array(); $this->Compile(file($file,1)); $this->Run(); } // <!-- INCLUDE myfile.html --> protected function Compile($lines) { foreach($lines as $value) { $matches = array(); if(preg_match("#<!-- INCLUDE (.*?) -->#", $value, $matches)) { $this->Compile(file($matches[1],1)); } elseif(preg_match_all('#<!-- (.*?) ([^\s]+=".*?") -->#',$value,$matches)) { exit(var_dump($matches)); } else { array_push($this->pattern, $value); } } } protected function Run() { foreach($this->pattern as $value) { print $value; } } } Code :
<html> <head> <title>Administration de votre pizzeria</title> </head> <body> <!-- INCLUDE menuAdmin.html --> <!-- MABOUCLE commande="variable" commande2="variable2" --> </body> </html> j'ai fait un exit(var_dump($matches)); pour afficher le résultat de l'opération lorsque ma ligne de boucle est traitée par le compilateur. |
|
|
|
|
|
#10 (permalink) |
|
Membre du Club
![]() |
Bon voici ce que j'ai trouvé. Jusque là si je fais :
Code :
preg_match_all('#<!-- (.*?) (.*?=".*?") (.*?=".*?") -->#',$value,$matches); Est-il possible d'éviter de répéter cinquante fois (.*?=".*?") pour récupérer tous les arguments ??? |
|
|
|
|
|
#12 (permalink) |
|
Membre du Club
![]() |
ça a l'air de fonctionner, mais apparemment j'ai le preg_match_all qui ne me capture que la dernière occurence de mon motif.
mes données : Code :
<!-- MABOUCLE commande="variable" commande2="variable2" commande3="variable3" commande4="variable4" --> Code :
preg_match_all('#<!-- (.*?) ((.*?)="(.*?)")* -->#',$value,$matches) Code :
array(5) { [0]=> string(103) "<!-- MABOUCLE commande="variable" commande2="variable2" commande3="variable3" commande4="variable4" -->" [1]=> string(8) "MABOUCLE" [2]=> string(22) " commande4="variable4"" [3]=> string(10) " commande4" [4]=> string(9) "variable4" } En plus il m'a pris un espace avant "commande4" alors que j'aimerais qu'il ne me le prenne pas. Merci de votre aide. |
|
|
|
|
|
#13 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: août 2004
Messages: 452
|
Me revoilà
Alors j'ai çà : Code :
$chaine = '<!-- MABOUCLE commande="variable" commande2="variable2" commande3="variable3" -->'; $masque = '#([^\s]*) ([^\s]+=".*?")#'; preg_match_all($masque, $chaine, $r); echo '<pre>'; print_r($r); echo '</pre>'; et voilà ce qu'elle donne : Code :
Array ( [0] => Array ( [0] => MABOUCLE commande="variable" [1] => commande2="variable2" [2] => commande3="variable3" ) [1] => Array ( [0] => MABOUCLE [1] => [2] => ) [2] => Array ( [0] => commande="variable" [1] => commande2="variable2" [2] => commande3="variable3" ) ) Pour ma part je trouve le masque un peu spécial et le résultat aussi... mais bon si çà peut te convenir...
__________________
Règle n°1 du forum francophone : Parler le français... Pas de question technique par MP, le forum est fait pour çà, merci. |
|
|
|
|
|
![]() |
||
Rechercher un motif plusieurs fois
|
||
| Outils de la discussion | |
|
|