PHP Expressions Régulières ! Modifier plusieurs occurences

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Orsam, 5 Août 2015.

  1. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Bonjour à tous,

    Je cherche la solution à un problème que j'ai depuis plusieurs jours.

    Je vous explique :

    Je cherche à remplacer toutes les occurrences d'une chaine.

    Code:
    $var = 'tu texte et [intro]Ici du text plus ou moin long[/intro] Ici le reste [intro]Le second texte en rouge[/intro] ...';
        echo preg_replace('`\[intro](.+)\[/intro]`', "<font color=#F00>$1</font>:", $var);
    
    Le problème, c'est que si j'ai une seule occurrence de "intro", ça fonctionne, mais si j'en ai plusieurs, ça ne fonctionne plus.

    Pour info : le $1 sera remplacé par str_replace('<br/>','autre chose',$1) je n'ai pas encore testé

    Auriez-vous une solution ?

    Merci d'avance

    Orsam
     
  2. loubet
    loubet WRInaute impliqué
    Inscrit:
    19 Février 2003
    Messages:
    788
    J'aime reçus:
    0
    peut être
    echo preg_replace('`\[intro]([^[]+)\[/intro]`', "<font color=#F00>$1</font>:", $var);
    ou
    echo preg_replace('`\[intro]([^\[]+)\[/intro]`', "<font color=#F00>$1</font>:", $var);
    ou
    echo preg_replace('`\[intro\]([^[]+)\[\/intro\]`', "<font color=#F00>$1</font>:", $var);
     
  3. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Bonjour et merci pour cette réponse.

    En faite, les trois fonctionnent. Je ne suis décidément pas au point avec les expressions régulières.

    Une autre petite question...

    Voici un exemple :
    Code:
    $html = "[intro1]bonjour <br> ceci est le test 1 [/intro1]";
    $html .= "[intro2]bonjour <br> ceci est le test 2 [/intro2]";
    $html .= "[intro3]bonjour <br> ceci est le test 3 [/intro3]";
    $html .= "[intro2]Une autre ligne <strong> ceci est le test</strong> 2 [/intro2]";
    
    Tu m'as montré comment "isoler" chaque "ligne"

    Ce que j'essai de faire maintenant, est de transformer UNIQUEMENT les intro2 en entités html avec la fonction htmlentities.

    J'ai essayé pas mal de chose comme ça par exemple :

    Code:
    $html = preg_replace("`\[intro2]([^\[]+)\[/intro2]`", htmlentities("$1"), $html ); 
    Mais rien à faire...

    Une idée ?

    Merci encore...

    Orsam
     
  4. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    [Résolu] PHP Expressions Régulières ! Modifier plusieurs occurences

    Bonjour,

    J'ai trouvé !!

    Code:
    $html = preg_replace_callback("`\[intro2]([^\[]+)\[/intro2]`", function ($matches) {
                            return htmlentities($matches[0]);
                        } , $html);
    C'est exactement ce que je cherchais !!! 8)

    Merci.

    Orsam
     
  5. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Si tu as des doutes sur les caractères à échapper dans les expressions régulières, utilise preg_quote.
    Exemple en ligne de commande :
    Code:
    :~$ php -r 'echo preg_quote("[intro2]")."\n";'
    \[intro2\]
    
    Ensuite, si tu souhaites protéger les caractères spéciaux HTML, alors utilises plutôt htmlspecialchars.

    Ensuite, $matches[0] va prendre tout le contenu correspond à ta RegExp ([intro2]...[/intro2]). Si tu souhaites récupérer le contenu entre les balises (ce qui correspondant aux parenthèses de ta RegExp), alors il faut utiliser l'index 1 : $matches[1]
    Mais ça dépend du comportement que tu veux, je ne dis pas que ce que tu as fait est faux.
    Mon cas sera utile si tu souhaites remplacer intro2 par de vrai balise HTML.

    Pour résumer ce que j'ai écrit :
    PHP:
    <span class="syntaxdefault"><br /></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />$html </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> preg_replace_callback</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"`\[intro2\]([^[]+)\[/intro2\]`"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> function </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$matches</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    return </span><span class="syntaxstring">"<span>"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">htmlspecialchars</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$matches</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]).</span><span class="syntaxstring">"</span>"</span><span class="syntaxkeyword">;<br />}</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $html</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"></span>
    D'ailleurs, sur la doc de PHP, tu as un très bel exemple correspondant à ton cas :
    http://php.net/manual/fr/function.preg-replace-callback.php#example-5272
     
  6. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Bonjour,

    Je regarde tout ça...

    Merci pour tes conseils.

    Orsam
     
Chargement...
Similar Threads - PHP Expressions Régulières Forum Date
PHP - preg_match_all() et expressions regulieres Développement d'un site Web ou d'une appli mobile 24 Août 2007
Question expressions régulières preg_match_all PHP Développement d'un site Web ou d'une appli mobile 19 Août 2007
Expressions régulières php pour traiter un texte Développement d'un site Web ou d'une appli mobile 26 Avril 2007
[Résolu] expressions régulières et PHP Développement d'un site Web ou d'une appli mobile 5 Avril 2007
[PHP Expressions régulières] Interdire chaîne Développement d'un site Web ou d'une appli mobile 19 Janvier 2006
[PHP] Expressions régulières, récupération de données Développement d'un site Web ou d'une appli mobile 9 Janvier 2006
Regrouper des expressions qui se ressemblent, en PHP ou MySQL, à l'aide Développement d'un site Web ou d'une appli mobile 6 Mars 2011
Indent en mode PHP ? Développement d'un site Web ou d'une appli mobile 9 Juin 2022
Arborescence de classes PHP et séquentialité. Développement d'un site Web ou d'une appli mobile 16 Mai 2022
Afficher des infos depuis plusieurs page en PHP Développement d'un site Web ou d'une appli mobile 23 Mars 2022
Sites de scripts PHP, jQuery, Ajax, etc. Le café de WebRankInfo 20 Mars 2022
Détecter arrêt user d'un script PHP ? Développement d'un site Web ou d'une appli mobile 28 Décembre 2021
sessions PHP sans cookies ? Développement d'un site Web ou d'une appli mobile 26 Décembre 2021
Afficher la dernière version d'un fichier php ? Développement d'un site Web ou d'une appli mobile 8 Novembre 2021
PHP / CURL : interrogation page tiers ne fonctionne plus Développement d'un site Web ou d'une appli mobile 2 Octobre 2021
Actualiser un script php toutes les 10 secondes Développement d'un site Web ou d'une appli mobile 6 Septembre 2021
PHP : problème de comparaison égalité dans boucle FOR avec incrément décimal de 0.1 Développement d'un site Web ou d'une appli mobile 26 Août 2021
Cache Etag nginx et PHP ? Administration d'un site Web 7 Août 2021
Fichier avec ou sans extension php pour le référencement Crawl et indexation Google, sitemaps 3 Août 2021
mon code ne fonctionne pas pour masquer les .php URL Rewriting et .htaccess 31 Juillet 2021