Salut,
Ma page est contenu dans $home, je fais alors :
echo preg_replace("/\<div id="footer"\> (.?)* \<\/div\>/", "toto", $home);
Je voudrais que
<div footer> tous ce qu'il y a ici </div> soit remplacé par 'toto'.
J'ai échappé les guillemets et les < >, mais ca ne fonctionne toujours pas. Je n'ai pas d'erreur, c'est juste qu'il ne reconnait pas le pattern!
On va partir du pattern :
"/\<div id="footer"\> (.?)* \<\/div\>/"
Déjà, les délimiteurs / (ceux qu'on utilise 95% du temps sans se poser de questions) sont peu adaptés au pattern que tu veux reconnaître puisqu'on les trouve dedans. Pour du html je préfère utiliser l'arobase ( @ ).
Ensuite les chevrons n'ont pas besoin d'être échappés, ils ne correspondent pas à des caractères de commande PCRE.
Tu peux aussi t'épargner l'échappement des guillemets en délimitant ton pattern avec des simples quotes (toujours une bonne idée pour un masque de regexp).
On arrive déjà à ceci :
'@<div id="footer"> (.?)* </div>@'
C'est mieux non ? on continue.
Il y a un problème avec les quantifieurs tels que tu les utilises (ainsi que des espaces en trop), une fois réglé ça donne :
'@<div id="footer">(.*)</div>@'
Enfin pour bien faire je te suggère d'ajouter le modifieur U à ton pattern (ceci pour t'éviter de capturer un truc du genre
<div id="footer"><div>plop</div></div>
'@<div id="footer">(.*)</div>@U'
Je te laisse aller voir la documentation PCRE sur php.net pour approfondir tous les points cités. Et bien sûr n'oublie pas de nous dire si ça marche mieux
