Problème particulier avec Preg_replace

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par yanism, 1 Mars 2011.

  1. yanism
    yanism WRInaute discret
    Inscrit:
    29 Novembre 2006
    Messages:
    73
    J'aime reçus:
    0
    Bonjour, je ne suis pas un spécialiste de Preg_replace et je rencontre quelques problèmes avec cette fonction php.

    Voilà mon cas :
    J'ai un tableau de chaines en minuscules qui peuvent être composées de un où plusieurs mots.
    Code:
    $nbOcc=4;
    $tab[1]='mot1';
    $tab[2]='mot2 mot3';
    $tab[3]='mot3;
    $tab[4]='mot4';
    
    J'ai un texte contenant les mots du tableau cité avant.

    $string='bla bla blabla blabla Mot1 blabla blabla blabla mot2 mot3 blabla blabla blabla blabla Mot4 blabla blabla blabla blabla blabla bla mot4';

    Dans ce texte les mots peuvent être en majuscules contrairement à ceux du tableau qui ne sont qu'en minuscules (je précise l'histoire des majuscules et minuscules juste pour justifier l'utilisation de preg_replace et non str_ireplace car au final je veux garder les majuscules du texte s'il y en avait, après remplacement. Mais ce n'est pas là le problème)

    Je voudrais donc remplacer dans le texte les mots (du tableau) par des url pour que celà donne :

    $string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';

    J'ai testé deux solutions (voir le code ci-dessous) qui ont visiblement le même effet. Elles fonctionnent bien sauf pour le cas de $tab[2] et $tab[3] où la chaine 'mot3' est contenue dans les deux éléments du tableau. Je présume qu'il remplace deux fois la chaine 'mot2 mot3' de mon texte à cause de $tab[2] et $tab[3] ce qui fout une grosse pagaille.
    Si l'ordre de $tab[2] et $tab[3] doit changer je voudrais que le texte ne soit changé qu'une seule fois et donc que je me retrouve soit avec :

    $string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';

    soit :

    $string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla mot2 <a href="http://url.com/mot3">mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';


    Voilà les deux fonctions utilisées (...et qui ne marchent pas pour mon cas :( )
    Code:
    for ($i=1; $i<=$nbOcc; $i++)
       {$pattern = '/( '.$tab[$i].' )/i';
       $string = '<a href="http://url.com/'.$tab[$i].'" >$1</a>';
       $string=preg_replace($pattern, $replacement, $string);
       }
    
    Code:
    $pattern = array();
    $replacement = array();              
    for ($i=1; $i<=$nbOcc; $i++)
       {$pattern[$i]='/('.$tab[$i].')/i';
       $replacement[$i] = '<a href="http://url.com/'.$tab[$i].'" >$1</a>';                                                              
       }
    $string=preg_replace($pattern, $replacement, $string);
    
    Merci d'avance
     
  2. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    il faut que dans ton masque tu vérifies que ton mot ne soit pas déjà à l'intérieur d'un <a href>
    pour pouvoir faire des essais de masques offline, regex-coach est l'idéal
     
  3. yanism
    yanism WRInaute discret
    Inscrit:
    29 Novembre 2006
    Messages:
    73
    J'aime reçus:
    0
    Merci je vais regarder ton lien, mais n'y a t'il pas une fonction déjà inclue dans php pour faire quelque chose de similaire car là à ce que je vois faut installer un module supplémentaire.
     
Chargement...
Similar Threads - Problème particulier Preg_replace Forum Date
Projet de plateforme : problème TVA avec particulier Droit du web (juridique, fiscalité...) 29 Juillet 2011
Problème particulier Droit du web (juridique, fiscalité...) 8 Septembre 2009
Problème de condition un peu particulière URL Rewriting et .htaccess 8 Juillet 2008
Probleme de .htaccess particulier Problèmes de référencement spécifiques à vos sites 8 Août 2003
WordPress Problème affichage style avec Elementor (titre, bordures, separateur) Administration d'un site Web Lundi à 12:12
Problème d'indexation de backlinks Débuter en référencement 24 Juillet 2022
Problème d'indexation de backlinks Problèmes de référencement spécifiques à vos sites 21 Juillet 2022
Probleme de visibilité de ma page Facebook Facebook 5 Juillet 2022
problème avec le développeur Droit du web (juridique, fiscalité...) 22 Juin 2022
Problème désindexation des pages de Google Débuter en référencement 21 Juin 2022
Problème d'indexation de pages sur Google Problèmes de référencement spécifiques à vos sites 31 Mai 2022
problème de redirection non souhaitée Administration d'un site Web 28 Avril 2022
Problème d'indexation Produits Prestashop Crawl et indexation Google, sitemaps 28 Avril 2022
Problème d'affichage des campagnes Google Ads dans un tableau de bord Data Studio AdWords 26 Avril 2022
Problème de vitesse d'affichage des pages sur Analytics Google Analytics 26 Avril 2022
Problème : Google Crawl et Index des pages en No Index et bloqué par le robot.txt Crawl et indexation Google, sitemaps 26 Avril 2022
Problème avec GA4 : nb de visiteurs temps réel et par jour Google Analytics 19 Avril 2022
Problème indexation pages précises en React.js Débuter en référencement 19 Avril 2022
Problème de référencement Demandes d'avis et de conseils sur vos sites 8 Avril 2022
Problème adsence : Annonces ne s'affichent plus AdSense 10 Mars 2022