Expressions PCRE récursives

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Expressions PCRE récursives

Expressions PCRE récursives

par devlop78 » 04 août 2011, 03:22

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 ;)