Hey

,
Ton expression régulière analyse bien une balise (même si je n'ai pas regardé les effets de bords ou cas particuliers), mais pense qu'elle peut-être dans un ensemble d'autres balises. Par exemple :
Code : Tout sélectionner
<p>J'ai <em>vraiment</em> eu du mal à mon examen de Théorie des Langages.</p> Ici, tu vas perdre de l'information normalement.
Une expression régulière donnée dans les RFC (et autres documentations sérieuses) pour analyser et faire correspondre (
pattern matching) une chaîne HTML (pas sûr que ce soit strictement réservé à l'XML car il y a des différences) est :
Code : Tout sélectionner
#([^>]+)?<([\w]+)(\s?[^>]*)(?(?<!(?:[/\s?]))>(.*?)(?:</\2>)+|>?)([^<]+)?#Ss Exploitable avec la fonction PHP preg_match_all(). Un exemple :
// 0. captured string ;
// 1. previous tag string ;
// 2. tag ;
// 3. attributes and values ;
// 4. tag content ;
// 5. next tag string.
// 1 2 3 4 5
$pattern = '#([^>]+)?<([\w]+)(\s?[^>]*)(?(?<!(?:[/\s?]))>(.*?)(?:</\2>)+|>?)([^<]+)?#Ss';
$out = '';
if(preg_match_all($pattern, $string, $substring, PREG_SET_ORDER)) {
J'ai un tout petit peu retoucher l'expression par rapport à l'originale qui ne fait que la reconnaissance. Si on veut analyser la chaîne, on peut passer certains passages sous silence (d'où les
?:).
C'est la façon la plus fine d'exploiter une chaîne HTML. On a tous les détails possibles.
À étudier

.
«
Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »
Hoa :
http://hoa-project.net (sur
@hoaproject).