it-roy-ru.com

Соответствующий атрибут 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

13
KyokoHunter

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

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

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

33
CalebD

Вот способ сделать это с помощью встроенных функций (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
5
GZipp

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

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

Пытаться:

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.

2
Bart Kiers

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

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

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

1
WNRosenberg

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

0
frops