2010-11-10 5 views
1

Je prévois de travailler sur chaque img d'un fichier html. Ces images ne doivent pas contenir le mot "noresize". J'ai construit la regex pour obtenir img:regex, obtenir img sans balise "noresize" dans un fichier html

#<img(\s[^>]*)>#ie 

Cela fonctionne très bien, mais je ne peux pas trouver comment spécifier « sans noresize ».

J'ai essayé quelque chose comme ça:

#<img(\s[^>]*)((?!noresize).)>#ie 

Mais de toute évidence, ce n'est pas ce que je dois ...

Toute idée? Julien

+2

Vous ne devez pas analyser HTML en utilisant des expressions régulières. –

+0

Vous utiliserez un [parseur DOM] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) pour parcourir le code HTML et extraire proprement les éléments que vous voulez. –

+0

Sérieusement, bienvenue à SO. Parsing HTML avec des expressions régulières est une sorte de bâillon courant ici, donc la réponse. Pourtant, l'utilisation d'un analyseur DOM est vraiment la meilleure idée pour cela. –

Répondre

0

Ce utilise XPath, que je pense serait une meilleure solution à votre problème;)

//img[not(@resize*) 
0

Si vous êtes déjà capturer avec succès les balises IMG avec votre regex pourquoi ne pas courir un peu post-traitement sur chaque match comme stripos($tag, 'noresize') === false - bien sûr, cela permettrait également de détecter de manière incorrecte des noms d'image comme noresize.jpg.

Ou, il suffit d'utiliser et HTML/analyseur DOM comme un être humain normal:

http://us.php.net/manual/en/domdocument.loadhtml.php

0

Quelque chose comme ça?

'/<img(((?!noresize)[^>])*)>/ie' 
Questions connexes