Aller au contenu

eregi et les patterns


Sujets conseillés

Posté

Bonjour,

Petite question concerant eregi. J'utilise la fonction sur du code html et je souhaite récupérer le lien contenu dans l'attribut SRC de la balise IMG. Voici ce que je fais:

eregi('src="(.*)"', $html, $regs)

Le problème c'est que je récupère le code compris entre src=" et la dernière occurrence de " dans le code html analysé alors que je voudrais qu'il s'arrête à la première " rencontrée. Y a-t-il moyen de lui dire de s'arrêter à la première apostrophe ?

Posté (modifié)

Salut,

eregi('src="(.*?)"', $html, $regs)

le ? active l'option Ungreedy (U), tu peux aussi l'utiliser de cette façon :

eregi('#src="(.*)"#U', $html, $regs)

Modifié par Phobos
Posté

Merci pour vos réponses.

J'ai essaye

eregi('src="(.*?)"', $html, $regs)

et j'obtiens

Warning: eregi() [function.eregi]: REG_BADRPT

Avec

eregi('#src="(.*)"#U', $html, $regs)

Je n'ai aucun résultat

:(

Je vais jeter un oeil aux liens....

Posté (modifié)

Excuse-moi,

il faut utiliser preg_match ou preg_match_all et non eregi pour avoir l'option Ungreedy :

preg_match('#src="(.*)"#U', $html, $regs)

ereg est une fonction posix, l'option ungreedy n'y existe pas contrairement à avec les fonctions pcre ;)

Modifié par Phobos
Posté (modifié)

src="[^"]*"

[^"] signifie 'n'importe quel caractère sauf "'.

J'ajoute que pour du HTML, l'utilisation de regexps est toujours risqué, le HTML étant souvent mal formé (et souvent plus complexe qu'on ne le pense à première vue). Par exemple certains utilisent des ' et pas des " pour les attributs, voire ne mettent pas de guillements du tout... Il ne faut pas oublier non plus que l'ordre des attributs peut être variable (img src=xxx ou img class=xxx src=xxx par exemple), que src=xxx est un attribut d'autres éléments (iframe...), etc. Un "vrai" parser HTML est recommandé (mais je ne sais pas s'il y en a un en PHP? En perl il y a HTML::Parser et ses dérivés).

Jacques.

edit: minor edit

Modifié par jcaron

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...