Regex Tag <img />

Regex Tag <img /> - PHP - Programmation

Marsh Posté le 20-08-2012 à 19:27:56    

Bonsoir,
 
Mon problème concerne une expression regulière dont l'objectif est de matcher tout les tag <img /> d'une source texte. J'utilise le code suivant qui fonctionnait très bien :
 

Code :
  1. preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/Ui', $source, $matches);


 
Sauf que je viens de tomber sur l'immonde cas ou on a le code html suivant :
 

Code :
  1. <img src="http://www.example.org/lalal/une belle apostrophe '/image.jpg" alt="lalla" />


 
Notez le single quote dans le src du tag... de sorte que mon expression régulière ne catch pas tout le contenu du src. Là j'avoue que mes connaissances en expression régulières sont trop limités pour me sortir de ce problème. Je viens donc demander votre aide.
 
J'ai fais des recherche, mais rien de très concluant. Merci pour votre aide :jap:


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 20-08-2012 à 19:27:56   

Reply

Marsh Posté le 22-08-2012 à 09:02:21    

UP  :bounce:


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 22-08-2012 à 09:27:36    

Tu peux donner un exemple de valeur pour $source et $matches
 
J'ai pas compris le pb :o


---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
Reply

Marsh Posté le 22-08-2012 à 09:32:23    

Oui je n'ai peut être pas assez détaillé... Je veux matcher tout les src de tag <img />. Ces src peuvent être soit entre simple quote ', soit entre double quote ".
 
Ça me pose un problème si j'ai un src entouré de " et contenant un '.
 
Il faudrait pouvoir spécifier que la fin de la chaîne à matcher doit être marquée par le même caractère qu'au début, un ' ou un " mais pas les deux.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 22-08-2012 à 10:03:00    

Mon conseil : laisse tomber les regexps. Pour du contenu complexe comme du html, c'est pratiquement impossible de traiter tous les cas possibles (sans compter les cas interdits en théorie, mais qu'on peut rencontrer en pratique)
 
Utilise plutôt un parser html.

Reply

Marsh Posté le 22-08-2012 à 10:18:02    

As-tu des outils en tête ? Parce que SimpleXML ou Dom n'aiment pas trop les document html mal formés. C'était d'ailleurs pour ça que je m'étais tourné vers une regex. Surtout que dans les quelques milliers de doc html que je dois traiter, le problème que je donne est le seul que je rencontre.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 22-08-2012 à 11:12:48    

dwogsi a écrit :

Oui je n'ai peut être pas assez détaillé... Je veux matcher tout les src de tag <img />. Ces src peuvent être soit entre simple quote ', soit entre double quote ".
 
Ça me pose un problème si j'ai un src entouré de " et contenant un '.
 
Il faudrait pouvoir spécifier que la fin de la chaîne à matcher doit être marquée par le même caractère qu'au début, un ' ou un " mais pas les deux.


 
 
tu peux pas simplement le faire en 2 étapes ? un si le fisrt caractère est " et un autre si le first est ' comme cela tu connais le caractère de fin ?
Pas forcement très jojo mais tu maîtrises plus le process


---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
Reply

Marsh Posté le 22-08-2012 à 11:15:44    

Recherche Google "php html parser", premier résultat : http://simplehtmldom.sourceforge.net/
 

Citation :

A HTML DOM parser written in PHP5+ let you manipulate HTML in a very easy way!
Require PHP 5+.
Supports invalid HTML.
Find tags on an HTML page with selectors just like jQuery.
Extract contents from HTML in a single line.


 
Je ne connais pas du tout, mais ça me semble être exactement ce dont tu as besoin (d'ailleurs, l'exemple donné va justement extraire les src de tous les tags img)

Reply

Marsh Posté le 22-08-2012 à 11:41:20    

KLeMiX a écrit :


tu peux pas simplement le faire en 2 étapes ? un si le fisrt caractère est " et un autre si le first est ' comme cela tu connais le caractère de fin ?
Pas forcement très jojo mais tu maîtrises plus le process


 
Oui en effet en deux étapes ça doit passer. Je vais tester ça, ça ne me plait pas particulièrement mais ça m'économisera du temps :)
 

Riokmij a écrit :

Recherche Google "php html parser", premier résultat : http://simplehtmldom.sourceforge.net/
 

Citation :

A HTML DOM parser written in PHP5+ let you manipulate HTML in a very easy way!
Require PHP 5+.
Supports invalid HTML.
Find tags on an HTML page with selectors just like jQuery.
Extract contents from HTML in a single line.


 
Je ne connais pas du tout, mais ça me semble être exactement ce dont tu as besoin (d'ailleurs, l'exemple donné va justement extraire les src de tous les tags img)


 
Ma question était plutôt de savoir si tu en avais testé, sinon je me débrouille pas trop mal avec Google :) Mais merci quand même.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 22-08-2012 à 11:52:23    

dwogsi a écrit :


 
Oui en effet en deux étapes ça doit passer. Je vais tester ça, ça ne me plait pas particulièrement mais ça m'économisera du temps :)
 


 
Jusqu'au jour où tu tomberas sur du html avec un retour à la ligne avant l'attribut src, ou un src non-quoté, ou je ne sais pas trop quoi encore. Et à chaque fois, il faudra revenir bricoler l'expression régulière.
 

dwogsi a écrit :


 
Ma question était plutôt de savoir si tu en avais testé, sinon je me débrouille pas trop mal avec Google :) Mais merci quand même.


 
Je fais pas du tout de PHP :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed