我正试图从我的每个帖子中获取第一张图片。如果我只有一个图像,下面这段代码很有用。但如果我有一个以上它给了我一个图像,但并不总是第一个。
我真的只想要第一张图片。很多时候第二个图像是下一个按钮
$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;?>"/>
答案 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}'>";
答案 2 :(得分:1)
你确定正则表达式总是匹配第一个吗?每次调用时都尝试打印数组,以查看:
error_log(var_export($matches, true));