Page 1 sur 1

Expressions PCRE récursives

Posté : 04 août 2011, 03:22
par devlop78
Bonjour à tous. Pour essais sur les expressions régulières, j'ai voulu parser un petit HTML juste avec une expression régulière.

Je me donne donc <html><body><p>Coucou</p></body></html>

Et l'expression #<(\w+)>(?:.*?)(?!\1)</\1>#s

J'ai essayé pas mal de choses (presque tout en fait ;) pour faire récursif avec (?R) mais je n'obtiens aucun résultat). La seule chose que j'arrive à avoir, en fonction de l'expression régulière, c'est soit "<p>Coucou</p>" avec "p" en deuxième sous-masque, soit "<html><body>...</html>" avec "html" en deuxième sous-masque.

J'ai donc essayé de partir de l'exemple du manuel PHP (qui est le même que le man de PCRE) :

#\( ( (?>[^()]+) | (?R) )* \)#x

Pour trouver les parenthèses imbriquées. Sauf que ça ne marche pas plus ...
array
0 =>
array
0 => string '(1+(2+(3+4)))' (length=13)
1 =>
array
0 => string '(2+(3+4))' (length=9)
On peut éventuellement voir une première dé-embrication (on ne voit plus le 1 dans le sous-masque) mais ça ne me convainc pas et ça ne m'aide pas à comprendre le chmilBlic.

Je rappelle que c'est un petit test que je me suis donné et si je veux parser du HTML pour un objectif professionnel, je viserai DOM, SAX ou autres ;)