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

时间:2015-11-03 16:33:20

标签: php regex html-parsing

我有这个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', '$2 $4', $text);

2 个答案:

答案 0 :(得分:0)

这非常粗糙,可能比您想要的更多,但在非常简单的情况下,这可能会有效:

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

这可能更好:

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

答案 1 :(得分:0)

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

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