Expression rationnelle [Résolu]

Signaler
Messages postés
358
Date d'inscription
vendredi 1 novembre 2002
Statut
Membre
Dernière intervention
5 septembre 2006
-
Messages postés
654
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
10 février 2009
-
Bonjours (j'espère que malgré le design du new site du monde est resté)
voici mon prob
ceci :
 $chaine_MEP = ereg_replace("\[c\]([^\[]*)\/c\", "
\\1
", $chaine_MEP);

me permet de remplacer un
 [c]toto/c 

par un :
 
toto


Mais j'ai ça pour remplacer aussi le gras l'italique le souligner bref une mise en page total.
le hic c'est que si je met les balises dans les balises ça ne les prend plus en compte il me faut donc une expression pour remplacer un truc du type
[a][c]toto/c/a et que ça marche aussi dans l'autre sens [c][a]toto/a/c
pq moi mon system ne marche que dans un cas mais pas dans l'autre.
il me faut aussi la fonction inverse pour retrouver mon message d'origine
voila si vous connaissez bien ce genre de truc moi c'est pas mon fort lol
merci

---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)

6 réponses

Messages postés
654
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
10 février 2009
1
Alors je crois que pour résoudre ton probleme le code c'est ça:
$truc = preg_replace("/\[c\](.+)\[\/c\]/","
\\1
",$truc);


J'ai pas testé mais ça devrait fonctionner :)
Bonne prog ;)

win
Messages postés
358
Date d'inscription
vendredi 1 novembre 2002
Statut
Membre
Dernière intervention
5 septembre 2006

Finalement c'est trop complexe je préviendrait simplement qu'il ne faut pas étre trop con et mettre :
[ u ] totototo [ / u ] (sans les blanc)
et non :
[ u ] toto [ / u ] [ u ] toto [ / u ] (sans les blanc)
on sais jamais !!!


En tous cas : Merci de ton aide !!!

---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
Messages postés
358
Date d'inscription
vendredi 1 novembre 2002
Statut
Membre
Dernière intervention
5 septembre 2006

Meric ca marche !!!
Sauf que, si je met :
totototo (pour mettre en sousligné

Il va me générer :
uu

Ca prend que le 1er et le derner en compte.

je sais bien que de faire ca c'est pas trés malin mais je cherche a éliminer tout ces petits bugs

Tu vois le prob?

Je crois qu'il faudrait faire qqch. comme
$truc = preg_replace("/\[c\](.+)\[\/c\]/","
\\1
",$truc);

en remplacant (.+) par une expression qui dis "tout sauf le bloc /u"
J'ai testé des truc chez moi mais ca marche po visiblement. :sad)

merci
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
Messages postés
358
Date d'inscription
vendredi 1 novembre 2002
Statut
Membre
Dernière intervention
5 septembre 2006

ps : c'est koi ce new bouton a gauche "Réponse acceptée !"
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
Messages postés
654
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
10 février 2009
1
hummm c'est normal qu'il prenne que le 1er et le dernier en compte .. en plus je vois pas l'interet d'avoir un code style
machin
... :\ ou alors tu comptes le nombre de et tu fais une boucle ...
Exemple:
<?php
$msg =  " lol [u]lolee";
$i  = explode("[u]",$msg);
$j = 1;
while ($j <= count($i)) {
$msg = preg_replace("/\[u\](.+?)\[\/u\]/s","\\1",$msg);
$j++;
}
echo $msg;
?>


Pour ta 2eme question le bouton "Réponse acceptée !" c'est pour montrer que le sujet est clos je pense ...

win
Messages postés
654
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
10 février 2009
1
Lol fais comme tu veux mais juste une chose, met
$msg = preg_replace("/\[u\](.+?)\[\/u\]/s","\\1",$msg);

au lieu de:
$msg = preg_replace("/\[u\](.+)\[\/u\]/s","\\1",$msg);

pour que ça répete l'opération dans le [ u ] lol :)

voila ++
win