Expressions régulières php pour traiter un texte

WRInaute discret
Bonjour à tous,

je fais appel à la communauté WRI car j'ai une problématique que, malgré mes recherches sur internet, je n'ai pas réussi à solutionner.

Voilà donc :

J'ai un site en php/mysql que j'ai doté d'un système de cache. Les pages générées pour le cache sont enregistrées dans un fichier texte, disons archive.txt pour l'exemple. Attention, il s'agit d'un fichier texte mais qui contient du php. On retrouve dans ce fichier les variables de ma page, sous la forme suivante :

Code:
<?
$titre = "";
$entete = "";
$milieu = "";
$liens = "";
?>

Je possède sur mon site 3 bases de données : une avec des marques, une avec des noms de produits et une avec d'autres marques.

Je souhaite mettre en place la solution suivante : un cron ouvre mes fichiers d'archives et met des liens vers les marques et produits dans mon contenu ($milieu) avant de l'enregistrer. J'aurai ainsi des liens vers les marques et produits sur tous mes contenus.

J'ai réussi à tout faire, sauf l'expression régulière qui va me permettre d'ajouter les liens. Cette expression régulière doit rechercher ma variable $valeurcherchee dans $milieu du fichier archive.txt pour la remplacer par <a href="$lienvaleurcherchee">$valeurcherchee</a>, avec les contraintes suivantes :

- doit remplacer uniquement entre $milieu = " et ";
- ne doit pas prendre en compte les textes entre les balises <a>, <b>, <strong>, <h*>, <caption> et <span>
- ne doit pas prendre en compte le texte dans les balises, soit entre < et >

Voilà, j'ai ces 3 contraintes...

en gros l'expression régulière devrait, d'après ce que j'ai compris, ressembler à ça :

Code:
milieu = \\"[.*]$valeurcherchee[.*]";

seulement le souci c'est que les [.*] doivent permettre d'exclure les textes entre les balises susmentionnées...

J'espère avoir été clair et obtenir de l'aide...

Merci d'avance à tous et longue vie à WRI ;)
 
WRInaute impliqué
salut,
le plus simple est de le faire en plusieurs étapes et d'utiliser dans un premier temps un preg_replace_callback()

exemple :

Code:
preg_replace_callback( "|.*resume = \"(.*)\".*|", $callback, $archive );

function callback() {

}

ainsi tanquillement en php tu peux rechercher et remplacer les liens
 
WRInaute discret
Merci,

en fait ce code va me permettre de retrouver le code entre mon $milieu = \" et "; c'est bien ça?

Mais cette solution est peu pratique car elle va m'obliger à faire de nombreux appels à cette fonction, or j'ai environ 200 mots à rechercher :

cette fonction sera appelée dans un foreach listant mon tableau de 200 valeurs. Avec une expreg standard ce serait plus simple...

Personne ne voit comment faire? Je vais regarder avec preg_replace_callback pour l'instant en tous cas!

Merci.
 
Discussions similaires
Haut