Jump to content

eregi et les patterns


adn

Recommended Posts

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 ?

Link to post
Share on other sites

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)

Edited by Phobos
Link to post
Share on other sites

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....

Link to post
Share on other sites

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

Edited by Phobos
Link to post
Share on other sites

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

Edited by jcaron
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...