Получение первого изображения в строке с 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_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $texthtml, $matches); $first_img = $matches [1] [0]; 

теперь я могу взять этот «$ first_img» и придерживаться его перед кратким описанием

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

Если вам нужен только первый тег источника, 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']; ?> 

Не используйте regex для анализа html. Используйте html-parsing 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/

После тестирования ответа отсюда Используя регулярные выражения для извлечения первого источника изображения из html-кодов? У меня лучшие результаты с менее сломанными изображениями ссылок, чем приведенный здесь ответ.

Хотя регулярные выражения могут быть полезны для большого числа задач, я считаю, что это обычно не подходит при анализе HTML DOM. Проблема с HTML заключается в том, что структура вашего документа настолько изменчива, что трудно точно (и точно я имею в виду 100% -ный шанс успеха без ложных срабатываний) извлекают тег.

Для получения более согласованных результатов используйте этот объект http://simplehtmldom.sourceforge.net/, который позволяет вам манипулировать html. Пример приведен в ответе в первой ссылке, которую я опубликовал.

 function get_first_image($html){ require_once('SimpleHTML.class.php') $post_html = str_get_html($html); $first_img = $post_html->find('img', 0); if($first_img !== null) { return $first_img->src'; } return null; } 

наслаждаться

Вы уверены, что регулярное выражение всегда соответствует первому? Попробуйте распечатать массив каждый раз, когда вы его вызываете, чтобы увидеть:

error_log(var_export($matches, true));