Je suis en train d'y réfléchir depuis un moment.PHP Supprimer toutes les balises de paragraphe à l'intérieur des balises d'en-tête
J'ai cette chaîne (il y a plus de contenu avant et après les balises h2):
...<h2 style='line-height: 44px;'><p>Lorem Ipsum</p></h2>...
Que regex dois-je utiliser pour supprimer tous les < p> et </p> balises dans ces balises d'en-tête ?
Je suis en train de faire quelque chose comme ça, mais le lookbehind positif on ne travaille pas:
// for the starting <p> tag
$str = preg_replace('/(?<=<h[1-6]{1}[^>]+>)\s*<p>/i', '', $str);
// for the ending </p> tag
$str = preg_replace('/<\/p>\s*(?=<\/h[1-6]{1}>\s*)/i', '', $str);
Cela ne prend pas les balises de compte de paragraphe profond à l'intérieur du texte dans les < h2> tag également
[Mise à jour]
Ceci est dérivé de l'un des liens suggérés PeeHaa
// for the starting <p> tag
$str = preg_replace("#(<h[1-6].*?>)<p.*?>#", '$1', $str);
// for the ending </p> tag
$str = preg_replace("#<\/p>(<\/h[1-6]>)#", '$1', $str);
_Don't_ utiliser une expression régulière, pour faire face à HTML. Utilisez un analyseur, comme DOM, pour cela. – KingCrunch
Oui, je sais que DOM est idéal mais pour cette instance, je n'ai pas le choix de le faire en PHP. De plus, les balises de paragraphes ici sont ajoutées automatiquement (WordPress) donc elles apparaissent toujours comme ceci et j'ai besoin de les enlever. –
PHP connaît DOM (et d'autres XML-analyseurs) aussi;) – KingCrunch