Bonjour à tous,
J'essaie de créer un parseur de balise personnel. J'ai déja fait quelque chose de la sorte voir ici Mais cette fois ci, c'est différent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $regex = '{ \[WCLINK \s+ # ca commence par [WCLINK avec un ou des blancs id=\'? (.+?) \'? \] # capture de l\'attribut id avec ou sans quotes ( (?: [^\[] | \[ (?!/?WCLINK) | (?R) )+ ) # capture récursive de la valeur entre balises \[/WCLINK\] # et ça finit par [/WCLINK] }Six'; # S pour optimiser le moteur, i pour la casse, x pour l\'espacement et les commentaires
Ce regex est utilisé via cette fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part return preg_replace_callback($regex, 'parseRec', $myString);
Ca me sort un tableau avec
[0] = id
[1] = le valeur entre les balises
Mon problème ici est qu'il peut y avoir plusieur paramètre et qu'ils ne sont pas obligatoire exemple:
[WCLINK]Lien[/WCLINK]
[WCLINK id_cp=Ftg]Lien[/WCLINK]
[WCLINK id_cp=Ftg hover=A]Lien[/WCLINK]
[WCLINK hover=A id_cp=Ftg]Lien[/WCLINK]
[WCLINK hover=A]Lien[/WCLINK]
La liste des paramètres possibles est ID_WC ID_CP ID_CP2 CLICK HOVER
Actuellement j'arrive à isoler le contenu et une chaine contenant les paramètres. Mais ensuite je dois à nouveau traiter cette chaine et j'aimerais que tout se fasse en un seul traitement
Pour le moment j'ai pour
[WCLINK id_cp=Ftg hover=A]Lien[/WCLINK]
Avec le regex modifiés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $regex = '{ \[WCLINK \s+ # ca commence par [WCLINK avec un ou des blancs \'? (.+?) \'? \] # capture de l\'attribut id avec ou sans quotes ( (?: [^\[] | \[ (?!/?WCLINK) | (?R) )+ ) # capture récursive de la valeur entre balises \[/WCLINK\] # et ça finit par [/WCLINK] }Six'; # S pour optimiser le moteur, i pour la casse, x pour l\'espacement et les commentaires
[0]="id_cp=Ftg hover=A"
[1]="Lien"
Donc deux possibilités :
1/ modifier le regex initial pour qu'il me sort un tableau du genre
[0]=>id_cp
[1]=>'valeur id_cp'
[2]=>hover
[3]=>'valeur hover'
[4]=>contenu
2/ créer un second regex qui parse ma chaine contenant les paramètres pour avoir
T1[0]=>chaine paramètre
T1[1]=>contenu
T2[0]=>id_cp
T2[1]=>'valeur id_cp'
T2[2]=>hover
T2[3]=>'valeur hover'
Mais niveau performance, je pense que la solution 1 est meilleure mais je sèche
A partir de la chaine suivant "id_cp=Ftg hover=A"
comment obtenir le tableau suivant
[0]=>'id_cp'
[1]=>'Ftg'
[2]=>'hover'
[3]=>'A'
ou mieux encore
'id_cp'=>'Ftg'
'hover'=>'A'
Voila pour le casse tête... bon amusement ;-)
Merci,
Partager