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 01/02/2008, 11h42   #1
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
Par défaut Analyser un contenu

Bonjour,

J'ai trouvé une fonction qui permet de remplacer des mots dans du contenu html par un autre mot (dans mon cas, c'est remplacer un texte par un lien) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
/**
  * Fonction (partie 1) permettant d'appliquer une regexp sur du contenu hors balise
  *
  * 
  *
  * @param String Texte capturé
  *
  * @return Integer flag
  */
 
function mon_rplc_callback($capture) {
    global $arg;
    return ($arg['flag'] == 1) 
    ? $arg['fct']($arg['de'], $arg['par'], $capture[1]).$capture[2]
    : $capture[1].$arg['fct']($arg['de'], $arg['par'], $capture[2]); 
}
 
/**
  * Fonction (partie 2) permettant d'appliquer une regexp sur du contenu hors balise
  *
  *
  * @param String $de : Recherche
  * @param String $par : Texte de remplacement
  * @param String $txt : Contenu à parser
  * @param String $fct : Fonction utilisée pour le remplacement
  * @param Integer $flag : 0 si remplacement dans balsies, 1 si rempalcement hors balises
  *
  * @return String texte
  */
 
function split_balise($de, $par, $txt, $fct, $flag = 1) {
    global $arg;
    $arg = compact('de', 'par', 'fct', 'flag');
    return preg_replace_callback('#((?:(?!<[/a-z]).)*)([^>]*>|$)#si', "mon_rplc_callback", $txt); 
}
Et voici l'appel :
Code :
1
2
3
4
5
6
7
8
9
10
// On remplace les mots du contenu par ceux du glossaire pour chaque élément du tableau $glossaire
    foreach ($glossaire as $cle => $valeur) {
        // On remplace les caractères spéciaux (expression régulière)
        $mot = str_replace("(","\(",htmlentities($valeur["mot"]));
        $mot = str_replace(")","\)",$mot);
        $mot = str_replace("[","\[",$mot);
        $mot = str_replace("]","\]",$mot);
        // On remplace le mot hors balise
        $contenu =  split_balise($mot, "<a href=\"".$GLOBALS["cheminRacine"]."glossaire/index.php?lettre=".$valeur["lettre"]."#".$valeur["ancre"]."\" title=\"Voir la d&eacute;finition\">\\0</a>", $contenu, 'eregi_replace', 1);
    }
ça fonctionne très bien, mais l'ennui c'est que si j'ai un mot 'pollution' et que le contenu contient 'dépollution', il me transformera une partie du mot dépollution : dépollution

Comment modifier l'expression régulière afin de remplacer uniquement les mots complets ? Je suis un peu une billen regexp

Merci d'avance !
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 12h40   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
avec preg_split, tu peux utiliser \b$mot\b, afin de t'assurer de spliter sur des mots entiers.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h33.


 
 
 
 
Partenaires

Hébergement Web