php éliminer une chaine de caracteres dans une autre

WRInaute impliqué
bonjour

je sais que ce n'ai pas un forum sur le php, mais je ne vais pas m'inscire sur un forum php pour si peu (dommage pour eux :oops: )

j'ai une chaine $chaine

je voudrais éliminer de $chaine tout ce qui ce trouve entre le caractére [ et le caractére ]

exemple:

$chaine="Une_Url_Quelquonque"

devient:

$chaine="Une_Url_Quelquonque"

ô communauté WRI tout puissante, mais quelle est donc cette fonction php ésotérique qui me permet d'atteindre ce but ultime et suprême ?
 
WRInaute impliqué
utilise http://www.php.net/strtr si tu connais exactement ce que tu veux supprimer de ta chaine

Si non trouve la position du premier "[" et puis de "]" avec la fonction strpos
et supprime tout ces qui se trouve entre ces deux positions(je sais pas avec quelle fonction...)
 
WRInaute occasionnel
Je te conseille de chercher des fonctions utilisant les expressions régulières... ce sera bien plus simple et souple.
 
WRInaute accro
Seraph a dit:
Je te conseille de chercher des fonctions utilisant les expressions régulières... ce sera bien plus simple et souple.

Tout à fait, c'est comme cela que sont d'ailleurs traités les langages dits bbcode
 
WRInaute impliqué
merci à vous

je vais étudier les regex alors

j'ai deja utiliser des regex dans .htacces mais betement je ne savais pas que l'on pouvais l'appliquer aux variables php :oops:
 
WRInaute impliqué
allez, je poste la réponse à ma question, si ca peut aider quelqu'un:

Code:
preg_replace('#\[(.*)\](.*)\[(.*)\]#U', '$2', $texte)

explication de #\[(.*)\](.*)\[(.*)\]#U

\[ c'est le caractère [ échapé
(.*) c'est n'ilmporte quel caratère
\] c'est le caractère ] échapé
U pour dire au regex de s'arrêter à la première occurence
$2 c'est ce qui est dans la deuxième paranthèse du regex

donc ca fait un truc du genre:

[bbcode]blablablablabla[bbcode] est transformé en blablablablabla
 
WRInaute accro
webmasterdemonsite a dit:
bonjour

je sais que ce n'ai pas un forum sur le php, mais je ne vais pas m'inscire sur un forum php pour si peu (dommage pour eux :oops: )

:mrgreen: :mrgreen:


(.*) c'est n'ilmporte quel caratère

c'est sans compter les retours chariots

il faut un ? dans le masque principale pour éviter d'être victime d'une capture paresseuse à cause de ces retours chariots

Code:
preg_replace('#\[(.*)\](.*?)\[(.*)\]#U', '$2', $texte);

et comme on est royal on va s'eviter 3 captures quand 1 seule suffit

Code:
preg_replace('#\[.*\](.*?)\[.*\]#U', '$1', $texte);

++
 
WRInaute impliqué
Merci KOogar

les regex n'ont pas l'air d'avoir de secrets pour toi :wink:

KOogar a dit:
(.*) c'est n'ilmporte quel caratère

c'est sans compter les retours chariots

il faut un ? dans le masque principale pour éviter d'être victime d'une capture paresseuse à cause de ces retours chariots

Code:
preg_replace('#\[(.*)\](.*?)\[(.*)\]#U', '$2', $texte);

et comme on est royal on va s'eviter 3 captures quand 1 seule suffit

Code:
preg_replace('#\[.*\](.*?)\[.*\]#U', '$1', $texte);

++

je viens d'essayer mais ca ne me fais pas le même résultat que mon bout de code:

Code:
         $texte = strip_tags ($texte);
         $texte = preg_replace('#\s#U', ' ', $texte);
         $texte = preg_replace('#\[(.*)\](.*)\[(.*)\]#U', '$2', $texte);

Le but étant que $texte est le contenu d'un post de mon forum, j'ôte les tags html, puis les retours chariot et retour à la ligne et enfin les balises bbcode

y a peut être moyen de faire mieux que mon bout de code, mais vous allez vous moquer de moi, cela m'a pris la matinée :oops: un dimanche en plus 8O

A+
 
Discussions similaires
Haut