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:
    707
    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
Ne pas mettre à jour forum Phpbb Administration d'un site Web Mercredi à 12:56
Phpbb et app.php et RSS ? Débuter en référencement Lundi à 15:56
Title et meta déscription par PHP Référencement Google 20 Décembre 2019
Boucle PHP et référencement Rédaction web et référencement 13 Décembre 2019
Mettre à jour Php Administration d'un site Web 1 Décembre 2019
Framework JS, template html/php ou Wordpress ? Débuter en référencement 26 Octobre 2019
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 14 Septembre 2019
PHP : checkdnsrr (MX) et domaine yahoo.fr Développement d'un site Web ou d'une appli mobile 5 Septembre 2019
Migration site PHP vers Gatsby : quelques questions Problèmes de référencement spécifiques à vos sites 22 Août 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice