Salut,

Après de multiples recherches, je n'arrive pas à obtenir une regex qui match exactement ce que je veut.

Je plante le décors

Je me suis mis en tête d'implémenter pour ma framework MVC perso un moteur et gestionnaire de template. J'ai quasiment finit toutes les fonctions de base sauf cette regex qui me…

Je donne un exemple de template concrêt pour pouvoir expliquer ma problématique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<h1>{titre}</h1>
 
{EACH livre}
  <span>Créé par quelqun</span>
  <h2>{titre}</h2>
  <p>Ceci est un résumé du livre</p>
 
  {EACH paragraphe}
    <h3>titre</h3>
    <p>Ceci est un résumé du paragraphe</p>
  {/EACH paragraphe}
{/EACH livre}
 
<p>Blablabla</p>
<span>{titre}</span>
 
{EACH dvd}
  <h2>{titre}</h2>
{/EACH dvd}
 
<p>Et voila</p>
<span>{titre} à été créé par moi</span>
Dans cet exemple, je ma parse ma page complète, puis mon each livre, puis each paragraphe, puis each dvd. En sachant bien sûr que dans l'absolu je peut avoir n each imbriqués.

Ma problématique

Je doit simplement à chaque fois que je parse un fragment, trouver une regex qui me permette avec un preg_replace de récupérer le(s) {titre} qui ne sont pas dans le(s) each pour les remplacer. Mais évidemment un titre qui se trouve entre 2 each doit être remplacer.

Par rapport à mon exemple pour le premier parsing ça donne (Remplace les balises en rouge) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<h1>{titre}</h1>

{EACH livre}
  <span>Créé par quelqun</span>
  <h2>{titre}</h2>
  <p>Ceci est un résumé du livre</p>

  {EACH paragraphe}
    <h3>titre</h3>
    <p>Ceci est un résumé du paragraphe</p>
  {/EACH paragraphe}
{/EACH livre}

<p>Blablabla</p>
<span>{titre}</span>

{EACH dvd}
  <h2>{titre}</h2>
{/EACH dvd}

<p>Et voila</p>
<span>{titre} à été créé par moi</span>

Voila, j'ai pas de regex à vous montrer car j'ai décidé de repartir de zéro pour éviter de m'entêter dans l'erreur.

J'attend pas que vous me donniez la réponse et que vous fassiez le boulot à ma place. Je souhaiterais juste que vous puissiez me donner des idées ou une méthode pour aborder cette regex. Je pense que je doit utiliser une regex récursive pour cibler les each, qu'en pensez vous?

Merci d'avance pour vos réponses.