par
sadeq » 05 juin 2006, 11:48
Effectivement, puisque tu sélectionnes tous les caractères (.*) entre le mote (clef=") et ("}}) il se trouve que ces caractères englobent aussi des balises entières si plusieurs existent avant d'arriver au dernier mot "}}"
Comme dans le texte suivant :
$ancien_body = '
{{indexerpage clef="clé1; clé2"}}{{indexerpage clef="clé3; clé4"}}{{indexerpage clef="clé5; clé6"}}
';
C'est pourquoi il faut arrêter la sélection d'une balise juste après la limite ("}}) en disant :
sélectionner tout caractère entre
{{indexerpage clef=" et
"}} sauf les
{ qui marquent normalement le début d'une autre balise.
Ce qui s'écrit : [^{]*
Remarque: les caractères spéciaux se trouvant entre crochets [] ne sont pas échappés
Voici une proposition, pour trouver donc toutes les balises
{{indexerpage clef="..."}} :
<?php
//Le texte de base
$ancien_body = '
{{indexerpage clef="clé1; clé2"}}{{indexerpage clef="clé3; clé4"}}{{indexerpage clef="clé5; clé6"}}
';
//La première balise {{indexerpage ...}} rencontrée
preg_match('#\{\{indexerpage clef="[^{]*"\}\}#', $ancien_body, $maux);
//Toutes les balises {{indexerpage ...}}
preg_match_all('#\{\{indexerpage clef="[^{]*"\}\}#', $ancien_body, $maux_all);
//Affichage des réslutats
echo "<pre>";
print_r($maux);
print_r($maux_all);
echo "</pre>";
?>
Effectivement, puisque tu sélectionnes tous les caractères (.*) entre le mote (clef=") et ("}}) il se trouve que ces caractères englobent aussi des balises entières si plusieurs existent avant d'arriver au dernier mot "}}"
Comme dans le texte suivant :
[php]$ancien_body = '
{{indexerpage clef="clé1; clé2"}}{{indexerpage clef="clé3; clé4"}}{{indexerpage clef="clé5; clé6"}}
';[/php]
C'est pourquoi il faut arrêter la sélection d'une balise juste après la limite ("}}) en disant :
sélectionner tout caractère entre [b]{{indexerpage clef=" [/b]et [b]"}} [/b]sauf les[b]{[/b] qui marquent normalement le début d'une autre balise.
Ce qui s'écrit : [^{]*
[u]Remarque[/u]: les caractères spéciaux se trouvant entre crochets [] ne sont pas échappés
Voici une proposition, pour trouver donc toutes les balises [b]{{indexerpage clef="..."}}[/b] :
[php]<?php
//Le texte de base
$ancien_body = '
{{indexerpage clef="clé1; clé2"}}{{indexerpage clef="clé3; clé4"}}{{indexerpage clef="clé5; clé6"}}
';
//La première balise {{indexerpage ...}} rencontrée
preg_match('#\{\{indexerpage clef="[^{]*"\}\}#', $ancien_body, $maux);
//Toutes les balises {{indexerpage ...}}
preg_match_all('#\{\{indexerpage clef="[^{]*"\}\}#', $ancien_body, $maux_all);
//Affichage des réslutats
echo "<pre>";
print_r($maux);
print_r($maux_all);
echo "</pre>";
?>[/php]