Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2007, 15h55   #1
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Par défaut Problème avec remplacement de texte structuré

Salut,

Après pas mal de temps à bidouiller mon code, je commence à desèsperer quelque peu.

J'ai un texte avec la structure suivante :
Citation:
[chapitre][titre]Mon Titre[/titre]
mon texte[/chapitre]

[chapitre][titre]Mon titre 2[/titre]
Mon texte 2[/chapitre]
Je peux avoir plusieurs chapitres. Ce que je voudrais, c'est remplacer toutes les balises [chapitre] par une balise <p> et toutes les balises [titre] par une balise <h3>.

Je voudrais donc obtenir en sortie :
Citation:
<p><h3>Mon Titre</h3>
Mon Texte
</p>

<p><h3>mon titre 2</h3>
Mon texte 2
</p>
J'utilise donc la fonction preg_replace avec comme regex :
Code :
'#\[chapitre\](.*?)\[titre\](.*?)\[/titre\](.*?)\[/chapitre\]#isU'
et comme code de sortie :
Code :
'<p>$1<h3>$2</h3>$3</p>'
Et bien sur, cela ne fonctionne pas du tout.

Dans mon test, j'ai 3 chapitres. Il ne convertit que la derniere balise [titre], et il crée une seule balise <p> tout au début, pour la refermer juste avant la seule balise [titre] qu'il convertit correctement. Donc j'ai quelques balises [titre] et [chapitre] en clair, qui restent telles quelles dans le texte.

Je doute bien que mon code regex doit être mauvais, mais j'ai beau retourner la situation dans tous les sens, je ne comprends. Autre point noir, l'utilité du code U à la fin de ma regex. J'ai bien compris l'utilité de i et s, mais celle de U est confuse. Sert elle à s'arreter à la première balise fermante rencontrée ? J'ai pas tout compris

Merci beaucoup. Et n'hésitez pas à demander plus de code si vous en avez besoins. Merci.
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 16h07   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Je dirai que les expressions régulieres ne sont pas indispensables dans ton cas, tu veux remplacer certains groupes de lettre par autre chose de bien précis, donc ce code devrait suffire :
Code :
1
2
$trans = array("[chapitre]" => "<p>", "[/chapitre]" => "</p>", "[titre]" => "<h3>", "[/titre]" => "</h3>");
$resultat = strtr($file, $trans);
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 17h08   #3
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Cela me convient tout à fait et règles simplement tous mes problèmes .

Merci beaucoup
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h54.


 
 
 
 
Partenaires

Hébergement Web