Я пытаюсь запустить 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