我有这个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);
答案 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';