Php 使用正则表达式获取所有图像和除图像以外的所有图像

Php 使用正则表达式获取所有图像和除图像以外的所有图像,php,regex,Php,Regex,我有一篇文章中有文本和多个图像,需要分别获得图像和文本 现在我有了这段代码,它只返回文章中的最后一幅图像: preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $img); preg\u match('/.+?)[\'“].*>/i',$article,$img); 如何选择所有图像并进行反转以仅获取文本 谢谢$text=preg\u replace('/.+?)[\'''''.].>/i','

我有一篇文章中有文本和多个图像,需要分别获得图像和文本

现在我有了这段代码,它只返回文章中的最后一幅图像:

preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $img);
preg\u match('/.+?)[\'“].*>/i',$article,$img);
如何选择所有图像并进行反转以仅获取文本

谢谢

$text=preg\u replace('/.+?)[\'''''.].>/i',''.$article);
$text = preg_replace('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', '', $article);
preg_match_all('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $images);

//use $images and $text
preg_match_all('/.+?)[\'“].*>/i',$article,$images); //使用$images和$text
您可以使用DOM:

$imgSrc = array();
$txt = '';

$dom = new DOMDocument();
@$dom->loadHTML($article);

$imgs = $dom->getElementsByTagName('img');

foreach ($imgs as $img) {
    $imgSrc[] = $img->getAttribute('src');
}

$xpath = new DOMXPath($dom);
$textNodes = $xpath->query('//*[not(self::script) and not(self::style)]/text()');
foreach ($textNodes as $textNode) {
    $tmp = trim($textNode->textContent);
    $txt .= (empty($tmp)) ? '' : $tmp . PHP_EOL;

}
XPath查询详细信息:

/
表示DOM树中的任何位置
*
表示所有标记节点
[…]
定义一个条件
非(self::script)
:当前节点不能是脚本节点

text()
返回文本节点

不要为此使用正则表达式,请使用DOM解析器。python+beautifulsoup?soup可能重复。find_all('img')…['src']?soup.text?我可以提供更多详细信息,如果你能给我一个样本数据,我可以写一些POC代码在HTML解析中,你几乎不想使用贪婪的匹配
+
。使用一个不加密的
+?
谢谢,$imgSrc现在可以工作,但$txt不能。我正在用mysql select获得$article,并在其显示在页面上之前对其进行处理,我ts尚未显示数据。这是一个问题还是其他问题?只缺少$textNodes中的第二个右括号:)@Yesian\uz:事实上,只有一个就足够了。