preg_replace_callback sauf entre 2 balises spécifiques.

Eléphant du PHP | 85 Messages

08 avr. 2012, 19:01

Salut,

Je bloque sur une expression régulière utilisant preg_replace_callback.

J'ai une variable contenant un texte balisé en html.
Je souhaite faire une moulinette, via une fonction de mon cru, sur son contenu mais en évitant de le faire sur le contenu situé entre les balises div...

exemple :
<p>texte... blabla <a>lien</a></p>
<div>des trucs</div>
<p>retexte... re blabla... </p>
<div>encore des trucs... </div>
etc...
Merci de votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 avr. 2012, 20:24

Salut,

Désolé mais ta question n'est pas claire, que veux tu exactement ?

Et qu'as tu fait jusqu'ici ?


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 85 Messages

08 avr. 2012, 21:28

Salut,

Bah je ne vois pas où je ne suis pas clair...

Donc, je reprend autrement...

J'ai une variable contenant ceci :
$var = '<p>Bonjour, blabla...<a>lien</a> blabla <img /></p><div class="machin">du texte avec des balises p, a, autres...</div>';
J'ai une fonction qui modifie des caractères,et dont les < > subissent un htmlentities.
Je veux activer cette fonction sur $var, sans que les div soient affectées.

Genre :
preg_replace_callback('(TOUT) SAUF(<div class=".+">.*</div>)', 'maFonction', $var);
Voilà, je ne vois pas comment être plus clair. ;-)

Et pour le moment, j'ai rien à proposer aprce que tout ce que j'ai essayé... ne fonctionne pas.

Evidement, l'inverse, je sais faire...
preg_replace_callback('`<div class=".+">(.*)</div>`sU', ''maFonction', $var);
Cela active bien ma fonction uniquement sur les bloc div.

Eléphant du PHP | 85 Messages

11 avr. 2012, 14:26

Bon, je me suis débrouillé autrement, mais c'est pas très propre...

Personne n'a une idée pour, via une regex, modifier tout ce qui ne se trouve pas entre 2 balises spécifiques ?

ViPHP
ViPHP | 2287 Messages

12 avr. 2012, 00:27

Bon, je me suis débrouillé autrement, mais c'est pas très propre...

Personne n'a une idée pour, via une regex, modifier tout ce qui ne se trouve pas entre 2 balises spécifiques ?
En développement, quand on ne trouve pas comment faire quelquechose, c'est parfois qu'on a mal défini ce qu'on voulait faire. Question de mots, de terminologie, d'ordre dans les idées...

Dans ton cas ce n'est pas si dur : pose-toi dans un coin, bien relaxé, la tête froide, relis ton sujet et ta question, et demande-toi si tu peux exprimer la même idée, mais d'une manière différente (que, cette fois, tu sauras faire). Tu vas trouver ;)

En cas de grosse panne d'inspiration, voici une piste : http://fr2.php.net/manual/fr/ref.pcre.php ( as-tu envisagé chacune de ces fonctions pour ton besoin ) ?
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 85 Messages

12 avr. 2012, 20:05

Merci. ;-)

Preg_split pourrait m'aider...
J'éclate, je travaille la partie concerné et je recolles...