Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从段落中提取并替换所有图像_Php_Regex_Html Parsing - Fatal编程技术网

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

Php 从段落中提取并替换所有图像,php,regex,html-parsing,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,以便我可

我有以下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);
$result=preg\u replace('/(.+?)(]*)\/>)(.+?)()/is'、'$2$4'、$text);

这是非常粗糙的,可能比您希望的匹配更多,但在非常简单的场景中,这可能会起作用:

$result = preg_replace('/(<p[^>]*>)(.*?)(<img[^>]*>)/is', '$3$1$2', $text);
$result=preg_replace('/(]*>)(.*?(]*>)/is'、'$3$1$2'、$text);
这可能更好:

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

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

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

使用html解析器很难做到这一点,更不用说使用正则表达式了。这就是我想要的,只有正则表达式。为什么坚持使用正则表达式?这会容易得多。这似乎是我设计它的方式。它不是要在嵌套时提取img标记。它可以,但也会错误地提取一些不应该提取的图像。我的假设是错误的根据OP的例子,img标签会紧跟在p标签打开之后,我只会拉它们。在你的例子中,你从锚标签中拉了一个img标签,这会使锚毫无用处,img不可点击。在这种情况下,你可能想同时从p标签中拉锚标签和img标签,但那不是这不是他所要求的——当出现未定义的情况时,最好是安全,而不是破坏源代码。这很好。能解释一下它的作用吗?