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

时间:2014-04-30 22:44:45

标签: php regex

我有一篇文章,其中包含文字和多个图片,需要分别获取图片和文字。

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

preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $img);

如何选择所有图像并反向获取文本?

谢谢

2 个答案:

答案 0 :(得分:1)

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

//use $images and $text

答案 1 :(得分:1)

您可以使用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树中的任何位置 *表示所有标记节点
[.....]定义条件
not(self::script):当前节点不能是脚本节点
text()返回文本节点