Ответ 1
Ваше выражение неверно. Попробуйте:
preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $row->introtext, $matches);
Обратите внимание на удаление скобок вокруг img и src и некоторых других очисток.
Я пытаюсь запустить 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 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
Try:
include ("htmlparser.inc"); // from: http://php-html.sourceforge.net/
$html = 'bla <img src="images/stories/otakuzoku1.jpg" border="0" alt="Inside Otakuzoku\ 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.
Если вам нужно использовать preg_match()
, попробуйте следующее:
preg_match('/(?<!_)src=([\'"])?(.*?)\\1/',$content, $matches);
Я использовал регулярное выражение намного проще. Мой код предполагает, что передаваемая ему строка содержит ровно один тег img без другой разметки:
$pattern = '/src="([^"]*)"/';
См. мой ответ здесь для получения дополнительной информации: Как извлечь img src, title и alt из html с помощью php?
Эта задача должна выполняться синтаксическим анализатором dom, потому что регулярное выражение не знает dom.
Код: (Демо)
$row = (object)['introtext' => '<div>test</div><img src="source1"><p>text</p><img src="source2"><br>'];
$dom = new DOMDocument();
$dom->loadHTML($row->introtext);
echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src');
Выход:
source1
Это говорит:
Чисто, уместно, легко читается и управляется.
Пожалуйста, попробуйте следующие инструкции: http://regexlib.com/Search.aspx?k=img&AspxAutoDetectCookieSupport=1
preg_match ('~] * src\s? =\s? \' "~ я ', $ description, $ image);
$img = $image[1];
if($img!="")
return '<img class="img-fluid abbout_img" src="'.$img.'" />';
else
return "";