Bonsoir tout le monde
J'ai une petite colle pour vous, amis balaises en expressions régulières...
Nous avons un texte de cette forme :
"$var1.var2"
ou encore
"$var1.var2.var3.var4"
enfin le nombre de varN n'a pas de limite supérieure en théorie (mais au minimum il est de 1)
Je recherche donc le masque de regexp qui me retournera un tableau :
Voici le test (parmi tant d'autres) déja testé par moi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?php $matches[1] = "var1"; $matches[2] = "var2"; $matches[3] = "var3"; $matches[4] = "var4"; ?>
Le problème de ce masque (et des expressions régulières en générale) c'est que le sous-masque suivi de * ne capture que la dernière occurence et non pas toutes !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?php preg_match('#\$([a-zA-Z0-9_]+)(?:\.([a-zA-Z0-9_]+))*#', '$var1.var2.var3.var4', $matches); print_r($matches); ?>
Je me retrouve donc avec un tableau :
Alors je vois déja venir les réponses du genre : "tu récupères 'var1.var2.var3.var4' et tu fais un explode à tous les points.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $matches[1] = "var1"; $matches[2] = "var4"; ?>
Oui mais non ! Par souci purement scientifique je veux savoir comment on peut le faire en Regexp !
J'ai essayé de m'intéresser aux sous-masques récursifs mais j'avoue que la doc PHP est plutôt obscure sur ce point.
C'est pourquoi je fais appel à vos dons de programmeurs pour résoudre ce problème par défi.
Merci beaucoup d'avance
Partager