| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
thierry8 WRInaute accro

Inscrit le: 11 Juil 2005 Messages: 3252
|
Posté le : Ven Mai 19, 2006 22:22 Sujet du message: Preg_replace un peu délicat !.. BESOIN D'AIDE SVP |
|
|
Voila je présent tout d'abord mon problème.
=>
J'ai un texte entre deux balises personnalisée, que je souhaite bien entendu en forme. Un exemple sera plus compréhensible:
[BALISE=1]mon texte[/BALISE]
=
<span id="1">mon texte</span>
=>
Pour ce cas je n'ai pas de problème en faisant ainsi:
preg_replace('`\[BALISE=([0-9]+)\](.+)\[/BALISE\]`is', '<span id="$1">$2</span>', $texte)
=>
En revanche lorsqu'il y en a un dans un autre, j'ai un problème, exemple:
[BALISE=1]mon texte[BALISE=2]mon texte[/BALISE]mon texte[/BALISE]
=
<span id="1">mon texte[BALISE=2]mon texte</span>mon texte[/BALISE]
(la première balise correspond au rouge et se ferme avec la balise orange, cela ne coincïde pas)
Or je souhaiterai ce résultat:
<span id="1">mon texte<span id="2">mon texte</span>mon texte</span>
J'espère que quelqu'un voudra bien m'aider, car j'ai vraiment beaucoup de difficulté sur ce point, et je ne sais absolument pas comment faire.
Merci. |
|
| |
|
 |
SuperPJ WRInaute passionné

Inscrit le: 15 Jan 2005 Messages: 513 Localisation: Paris, France
|
Posté le : Sam Mai 20, 2006 0:22 Sujet du message: Re: Preg_replace un peu délicat !.. BESOIN D'AIDE SVP |
|
|
Avec des balises personnalisées qui s'encastrent c'est compliqué de le faire en une seule expression régulière ... personnellement voici ce que je ferais (je ne sais pas si ça te conviendra mais bon c'est déjà ça ):
| Code: |
<?
$texte = '[BALISE=1]mon texte[BALISE=2]mon texte[/BALISE]mon texte[/BALISE]';
$chercher = array
(
'!\[BALISE=(\d+)\]!is',
'!\[/BALISE\]!is',
);
$remplacer = array
(
'<span id="\1">',
'</span>',
);
$texte = preg_replace( $chercher, $remplacer, $texte );
echo $texte;
// <span id="1">mon texte<span id="2">mon texte</span>mon texte</span>
?> |
|
|
| |
|
 |
Jul-Wup WRInaute discret

Inscrit le: 13 Déc 2005 Messages: 96
|
Posté le : Sam Mai 20, 2006 15:29 Sujet du message: Preg_replace un peu délicat !.. BESOIN D'AIDE SVP |
|
|
Un bon test à faire, c'est avec
$texte = '[BALISE=1]mon texte[BALISE=2]mon texte[/BALISE][BALISE=3]mon textemon texte[/BALISE]';
Et là, ça remplace [BALISE=3] par le span associé. Ce qui pose des problèmes avec les tableaux, bold etc... pour la mise en page. |
|
| |
|
 |
thierry8 WRInaute accro

Inscrit le: 11 Juil 2005 Messages: 3252
|
Posté le : Sam Mai 20, 2006 18:20 Sujet du message: Preg_replace un peu délicat !.. BESOIN D'AIDE SVP |
|
|
| Jul-Wup a écrit: |
Un bon test à faire, c'est avec
$texte = '[BALISE=1]mon texte[BALISE=2]mon texte[/BALISE][BALISE=3]mon textemon texte[/BALISE]';
Et là, ça remplace [BALISE=3] par le span associé. Ce qui pose des problèmes avec les tableaux, bold etc... pour la mise en page. |
Oui en effet, merci SuperPJ mais cette solution ne fonctionne pas pour la raison citée ci-dessus et pour d'autres encore...
Si quelque avait encore une idée.....  |
|
| |
|
 |
lefou WRInaute occasionnel

Inscrit le: 07 Juin 2005 Messages: 113
|
Posté le : Ven Juin 09, 2006 13:36 Sujet du message: Preg_replace un peu délicat !.. BESOIN D'AIDE SVP |
|
|
En espérant que cela puisse t'aider :
| Citation: |
$texte=preg_replace("/\[BALISE=([0-9]+)\]/i","<balise id=\\1>",$texte);
$texte=preg_replace("/\[/BALISE\]/i","</balise>",$texte); |
En fait je traîte la balise ouvrante et la balise fermante séparément.
Ceci va bien pour l'affichage mais pose problème pour la création d'un nouveau texte. En effet, en supposant que [BALISE]texte[/BALISE] met le texte en gras, cela fonctionnera aussi si on n'a que [BALISE]texte (car le formatage aura lieu). Le truc est donc de tester au moment de l'enregistrement du texte s'il y a autant de balises [BALISE] que de balises [/BALISE] avec affichage d'un message d'erreur si ce n'est pas le cas (utilisation de la fonction substr_count pour chercher le nombre d'occurances dans le texte). |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
|
|