web-dev-qa-db-fra.com

Attribut SRC correspondant du tag IMG en utilisant preg_match

Je tente d'exécuter preg_match pour extraire l'attribut SRC de la première balise IMG d'un article (dans ce cas, stocké dans $ row-> introtext).

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

Au lieu d'obtenir quelque chose comme

images/stories/otakuzoku1.jpg

de

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

Je viens juste

0

La regex devrait être juste, mais je ne peux pas dire pourquoi elle semble correspondre à l'attribut border et non à l'attribut src.

Sinon, si vous avez eu la patience de lire jusque-là sans passer directement au champ de réponse et en tapant "utiliser un analyseur HTML/XML", un bon tutoriel est-il recommandé, car je ne parviens pas à en trouver un du tout qui soit applicable à PHP 4.

PHP 4.4.7

13
KyokoHunter

Votre expression est incorrecte. Essayer:

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

Notez la suppression des crochets autour de img et src et d’autres nettoyages.

33
CalebD

Voici un moyen de le faire avec des fonctions intégrées (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

Si vous devez utiliser preg_match() lui-même, essayez ceci:

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

Essayer:

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;
    }
}

qui produira:

images/stories/otakuzoku1.jpg

Cela devrait fonctionner avec PHP 4.x.

2
Bart Kiers

La regex que j'ai utilisé était beaucoup plus simple. Mon code suppose que la chaîne qui y est passée contient exactement une balise img sans autre balise:

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

Voir ma réponse ici pour plus d'informations: Comment extraire img src, title et alt de html en utilisant php?

1
WNRosenberg
0
frops