Défi -> Regex bien casse tete

Défi -> Regex bien casse tete - Divers - Programmation

Marsh Posté le 21-08-2009 à 15:10:23    

Bonjour,
 
J'ai une regex assez complexe à créer.  
Je doit avoir toutes les balise image ne se trouvant pas dans une image.
En termes plus regex, toutes les tags <img.*?> mais qui ne soit pas précédé d'un tag <a.*?> à moins bien sur qu'il n'y ai un </a> entre le <a ouvrant et le <img.
 
Exemples:
1) sqdsqs<a dsfd><img>sddsffdssdf</a>               -> NON
2) sqdsqs<a dsfd>sdfdssdf<img>sddsffdssdf</a>    -> NON
3) sqdsqs<a dsfd>sdw</a>fdssdf<img>sddsffdssdf  -> OUI
4) sqdsqs<dsfd>b<img>sddsffdssdf                      -> OUI
 
Voici ma regex incomplete car elle math encore l'exemple 2)
(?<!<a.*?> )<img.*?>
 
D'avance merci
 
Ben

Reply

Marsh Posté le 21-08-2009 à 15:10:23   

Reply

Marsh Posté le 21-08-2009 à 16:48:29    

ce qu'il te faut c'est un parseur html, pas une regexp...  [:spamafote]

Reply

Marsh Posté le 21-08-2009 à 19:27:52    

Clair, les regexp c'est comme l'XML, bien souvent au lieu de te résoudre un problème, ça t'en apporte un autre.

Reply

Marsh Posté le 21-08-2009 à 19:46:33    

pataluc a écrit :

ce qu'il te faut c'est un parseur html, pas une regexp...  [:spamafote]


+1
 
Si c'est un site web que tu veux parser, je te conseille de regarder du côté de WWW Mechanize et des plugins qui gravitent autour... c'est expédié rapidement


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 21-08-2009 à 19:54:44    

pataluc a écrit :

ce qu'il te faut c'est un parseur html, pas une regexp...  [:spamafote]


Pas mieux [:elessar53]  
 
Les regex c'est à utiliser quand c'est adapté, quand ça l'est pas ça fait plus de mal que de bien et c'est rapidement inmaintenable.
 
Ceci est l'un des cas. Un format hiérarchique structuré comme le SGML (dont est originaire le HTML) ou l'XML, ça ne se manipule pas avec des regex.
 
PS: à noter que si le parser HTML de ton langage permet d'exécuter des requêtes xpath, la découverte & sélection de nodes <img/> n'étant pas contenues dans un lien <a/> est trivial: //img[not(parent::a)] (ou //img[not(ancestor::a)] selon que le <img/> doive être directement dans un <a/> ou qu'il puisse y avoir e.g. un <span/> entre les deux)


Message édité par masklinn le 21-08-2009 à 20:04:30

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

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