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:
    792
    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
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
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
Malware S.Susp.PHP.gen... Administration d'un site Web 15 Juillet 2021
La fonction mail (PHP) ne passe pas ! Demandes d'avis et de conseils sur vos sites 28 Juin 2021
Fonction récursive PHP. Développement d'un site Web ou d'une appli mobile 24 Avril 2021