Соответствие атрибуту SRC тега IMG с использованием preg_match

Я пытаюсь запустить preg_match, чтобы извлечь атрибут SRC из первого тега IMG в статье (в этом случае хранится в $ row-> introtext).

preg_match('/\< *[img][^\>]*[src] *= *[\"\']{0,1}([^\"\']*)/i', $row->introtext, $matches); 

Вместо того, чтобы получать что-то вроде

 images/stories/otakuzoku1.jpg 

из

 <img src="images/stories/otakuzoku1.jpg" border="0" alt="Inside Otakuzoku's store" /> 

Я просто

 0 

Регулярное выражение должно быть правильным, но я не могу понять, почему он соответствует атрибуту border, а не атрибуту src.

В качестве альтернативы, если у вас было терпение, чтобы прочитать это далеко, не пропуская прямо в поле ответа и набрав «использование анализатора HTML / XML», может быть рекомендован хороший учебник для одного из них, так как у меня возникли проблемы с поиском одного из них. применимо к PHP 4.

PHP 4.4.7

Ваше выражение неверно. Пытаться:

 preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $row->introtext, $matches); 

Обратите внимание на удаление скобок вокруг img и src и некоторых других очисток.

Вот как это сделать со встроенными функциями (php> = 4):

 $parser = xml_parser_create(); xml_parse_into_struct($parser, $html, $values); foreach ($values as $key => $val) { if ($val['tag'] == 'IMG') { $first_src = $val['attributes']['SRC']; break; } } echo $first_src; // images/stories/otakuzoku1.jpg 

Пытаться:

 include ("htmlparser.inc"); // from: http://php-html.sourceforge.net/ $html = 'bla <img src="images/stories/otakuzoku1.jpg" border="0" alt="Inside Otakuzoku\'s store" /> noise <img src="das" /> foo'; $parser = new HtmlParser($html); while($parser->parse()) { if($parser->iNodeName == 'img') { echo $parser->iNodeAttributes['src']; break; } } 

который будет производить:

 images/stories/otakuzoku1.jpg 

Он должен работать с PHP 4.x.

Регулярное выражение, которое я использовал, было намного проще. Мой код предполагает, что передаваемая ему строка содержит ровно один тег img без другой разметки:

 $pattern = '/src="([^"]*)"/'; 

См. Мой ответ здесь для получения дополнительной информации: Как извлечь img src, title и alt из html с помощью php?

Если вам нужно использовать preg_match() , попробуйте следующее:

  preg_match('/(?<!_)src=([\'"])?(.*?)\\1/',$content, $matches); 

Пожалуйста, попробуйте следующие инструкции: http://regexlib.com/Search.aspx?k=img&AspxAutoDetectCookieSupport=1