提取并替换段落中的所有图像

Extract and replace all images from paragraph

我有这个 html 内容:

<p><img src="##" />
</p>
<p>

<img src="##" />
</p>
<p>
</p>
<p class="ss"><a href="ss">
    <img src="####" />
</a></p>

我想提取所有段落及其所有图像并重新格式化 html 这样我就可以先有图像然后下面的段落这是一个例子:

<img src="##" /><p>
</p>
<img src="##" />
<p>


</p>
<p>
</p>
<img src="####" />
<p class="ss"><a href="ss">

</a></p>

我尝试了一些但它不起作用:

$result = preg_replace('/(<p\b[^><]*)>(.+?)(<img([^>]*)\/>)(.+?)(<\/p>)/is', ' ', $text);

这非常粗糙,可能会比您想要的匹配更多,但在非常简单的情况下,这可能会起作用:

$result = preg_replace('/(<p[^>]*>)(.*?)(<img[^>]*>)/is', '', $text);

这可能更好:

$result = preg_replace('/(<p[^>]*>)([^<]*)(<img[^>]*>)/is', '', $text);

这对我有用,它会查找包含任何内容和图像的每个段落,因此我可以匹配所有图像及其包含的段落。

$pattern = '/(<p\b[^><]*>)(((?!<\/p>).?)*)(<img.*?\/\>)(((?!<\/p>).?)*)(<\/p>)/s';