用php获取字符串中的第一个图像

时间:2011-09-20 03:37:11

标签: php image preg-match-all

我正试图从我的每个帖子中获取第一张图片。如果我只有一个图像,下面这段代码很有用。但如果我有一个以上它给了我一个图像,但并不总是第一个。

我真的只想要第一张图片。很多时候第二个图像是下一个按钮

$texthtml = 'Who is Sara Bareilles on Sing Off<br>
<img alt="Sara" title="Sara" src="475993565.jpg"/><br>
<img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>';

preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $texthtml, $matches);
$first_img = $matches [1] [0];

现在我可以把这个“$ first_img”放在简短描述前面

<img alt="Sara" title="Sara" src="<?php echo $first_img;?>"/>

3 个答案:

答案 0 :(得分:43)

如果您只需要第一个源代码,preg_match应该代替preg_match_all,这对您有用吗?

<?php
    $texthtml = 'Who is Sara Bareilles on Sing Off<br>
    <img alt="Sara" title="Sara" src="475993565.jpg"/><br>
    <img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>';
    preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $texthtml, $image);
    echo $image['src'];
?>

答案 1 :(得分:5)

不要使用正则表达式来解析html。 使用html解析的lib / class,如phpquery:

require 'phpQuery-onefile.php';

$texthtml = 'Who is Sara Bareilles on Sing Off<br> 
<img alt="Sarahehe" title="Saraxd" src="475993565.jpg"/><br> 
<img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>'; 
$pq = phpQuery::newDocumentHTML($texthtml);
$img = $pq->find('img:first');
$src = $img->attr('src');
echo "<img alt='foo' title='baa' src='{$src}'>";

下载:http://code.google.com/p/phpquery/

答案 2 :(得分:1)

你确定正则表达式总是匹配第一个吗?每次调用时都尝试打印数组,以查看:

error_log(var_export($matches, true));