Vous ne devriez pas vraiment modifier un DOM en utilisant regex. Il y a des parseurs DOM pour faire ce genre de chose. Ce n'est même pas si difficile:
$html = '<p><br></p><div align="justify"><b>Some Text</b></div>
<p>foobar</p>
<p></p>';//empty
$dom = new DOMDocument;
$dom->loadHTML($html);
$pars = $dom->getElementsByTagName('p');
foreach ($pars as $tag)
{
if (!trim($tag->textContent))
{
$tag->parentNode->removeChild($tag);
}
}
C'est tout. Vous sélectionnez simplement tous des p
balises, puis vérifier si son contenu trim
texte -ed est vide, si elle est: supprimer le nœud en sélectionnant son parent, et d'appeler la méthode DOMNode::removeChild
...
L'extrait ci-dessus 2 supprime des 3 nœuds de paragraphe, celui contenant foorbar
est laissé tel quel. Je thinkg c'est ce que vous essayez de faire ...
Pour obtenir le fragment de dom réelle, après avoir enlevé les balises qui doivent être supprimés, vous pouvez simplement faire ceci:
echo trim(
substr(
$dom->saveHTML($dom->documentElement),//omit doctype
12, -14//12 => <html><body> and -14 for </body></html>
)
);
Fonctionne bien pour moi. 'preg_replace ($ re, '', $ str);' –
moi aussi http://regex101.com/r/qW4dI6/3 –
Utiliser regex pour manipuler les éléments DOM n'est pas vraiment une bonne idée, vous devriez utiliser un parseur DOM .http: //simplehtmldom.sourceforge.net/ –