2014-01-03 3 views
2

У меня есть HTML какполучить SRC изображения из HTML с регулярным выражением

<td class="td_scheda_modello_dati"> 

     <img src="/webapp/safilo/gen_img/p_verde.gif" width="15" height="15" alt="" border="0"> 

</td> 

Я хочу, чтобы извлечь IMG SRC из этого HTML, используя preg_match_all().

Я сделал это

preg_match_all('#<td class=td_scheda_modello_dati>(.*)<td>#',$detail,$detailsav); 

Она должна дать всю IMG tag.But это не дает мне IMG тег. Итак, какие изменения нужно сделать, чтобы получить конкретную ценность?

+2

Использовать HTML-парсер. – Toto

+0

Возможный дубликат [Как извлечь img src, title и alt из html с помощью php?] (Http://stackoverflow.com/questions/138313/how-to-extract-img-src-title-and-alt-from -html-using-php) – Toto

+0

Не могли бы вы ответить на вопрос, помог ли мой ответ? –

ответ

5

Короче говоря:ideone

Вы не должны использовать Regex, но вместо этого HTML анализатор. Вот как.

<?php 
$html = '<img src="/webapp/safilo/gen_img/p_verde.gif" width="15" height="15" alt="" border="0">'; 
$xpath = new DOMXPath(@DOMDocument::loadHTML($html)); 
$src = $xpath->evaluate("string(//img/@src)"); 
echo $src; 
?> 
+2

Хотя парсер HTML является идеальным решением, я чувствую, что он ищет гораздо более краткосрочное решение. Также синтаксический анализатор может неверно «исправить» требуемые «quirks» на выходе. – Flosculus

+0

Я думаю, он может не знать, что парсер HTML можно использовать для выполнения таких задач вместо Regex. Я дал ему достойное решение в этом отношении. –

+1

Хорошо +1 для лучшей практики. – Flosculus

1

Попробуйте этот код.

$html_text = '<td class="td_scheda_modello_dati"> 
      <img src="/webapp/safilo/gen_img/p_verde.gif" width="15" height="15" alt="" border="0"></td>'; 

preg_match('/src="([^"]*)"/i', $html_text , $res_array) ; 

print_r($res_array); 
+0

Kumar, у меня есть несколько img-тегов в html, что, если я просто хочу src тегов, которые находятся в ... ??? – MJQ

+1

MJQ, я все для быстрых исправлений регулярных выражений, но если в каждой ячейке есть несколько изображений, для этого потребуется 2 регулярных выражения, чтобы получить все 'src' и быть более подверженными ошибкам. – OGHaza

0

Попробуйте это: <img[^>]*src="([^"]*/gen_img/p_verde.gif)"

+0

Как это записать в preg_match_all() ??? – MJQ

1

Попробуйте использовать модификатор s после регулярного выражения. Поведение по умолчанию для символа точки не соответствует символам новой строки (что соответствует вашему примеру).

Что-то вроде:

preg_match_all('#<td class=td_scheda_modello_dati>(.*)</td>#s',$detail,$detailsav); 

Если сделать трюк.

Стоит немного почитать о модификаторах, тем больше вы делаете с регулярным выражением, тем полезнее они становятся.

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

Edit: также, только что понял, что код размещен отсутствовал закрывающий тег TD (это было <td> вместо </td>). Исправлен мой пример, чтобы отразить это.

Смежные вопросы