Comment detecter les imbrications avec preg_match_all ?

Comment detecter les imbrications avec preg_match_all ? - PHP - Programmation

Marsh Posté le 02-01-2006 à 20:48:21    

Bonsoir à tous,
 
Une des particularités de preg_match_all() est de detecter toutes les occurences qui conviennent au masque.
 
Donc par exemple si je fais un masque pour detecter les balises de la forme <...>...</...> et que j'ai ça :
 

<foo>blablabla</foo>
<bar>blablabla</bar>


 
Il va bien me détecter les 2.
 
Le problème est que si j'ai ça :
 

<foo>blabla<bar>blabla</bar>blabla</foo>


 
Il ne me detecte que <foo> car <bar> est inclus dedans.
 
Existe-t-il un moyen de faire détecter tous les blocs qui correspondent au masque ?
 
Merci :)


Message édité par Dj YeLL le 02-01-2006 à 20:48:40

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-01-2006 à 20:48:21   

Reply

Marsh Posté le 02-01-2006 à 21:13:05    

Je ne pense pas que ce soit possible simplement avec une syntax particuliere de masque ou une option de fonctionnement passée a preg_match_all.
 
A priori : un algo pour traiter les resultats recursivement :/

Reply

Marsh Posté le 02-01-2006 à 21:15:57    

Autre solution, si tu connais le nombre max d'encapsulation (n encapsulations) tu peux faire n appels a preg_match_all chacun ne capturant qu'un seul niveau d'encapsulation grace aux assertions positives/negatives avant/arrieres.

Reply

Marsh Posté le 02-01-2006 à 22:03:22    

Je ne connais pas à l'avance le nombre max d'encapsulation. Donc j'ai fais une boucle.
 
Si le masque est trouvé, on stock le contenu, et on relance la fonction sur ce contenu, et ainsi de suite :)
 
Merci
 
++


---------------
Gamertag: CoteBlack YeLL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed