IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Remplacer une chaîne récurrente [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut Remplacer une chaîne récurrente
    Salut,

    J'ai une chaine, ici <p>&nbsp;</p>, que je souhaite remplacer si elle se repètes trop de fois à la suite. Je sais faire ça pour un caractère, mais je n'ai aucune idée pour une chaine entière...
    Voila ce que j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = preg_replace("#(\<p\>&nbsp;\</p\>){".$sautslignes."}#Us", "<p>&nbsp;</p>", $result['Text']);
    Mais ça me rajoute des paragraphes partout

  2. #2
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Aucune idée ou j'ai mal expliqué?

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je pense que tu peux utiliser les quantifieurs entre accolades :
    • {3,5} signifie 3, 4 ou 5 fois
    • {3,} signifie à partir de 3 fois

  4. #4
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci de ta réponse mais même si je rajoute la virgule, aucun remplacement n'est fait (mais cette fois, pas de problème de sauts à tout va...).

    Merci

  5. #5
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Oops je retire ce que j'ai dit ça a l'air de fonctionner Merci

  6. #6
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Si quelqu'un peut m'aider à réfléchir je lui en serai reconnaissant...
    J'ai un texte:

    <p>Text</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>Text</p>
    J'ai une option qui autorise seulement 4 sauts de paragraphe vide.
    Voila ce que je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = preg_replace("#(\<p\>&nbsp;\</p\>){".($sautslignes+1).",}#Us", "", $result['Text']);
    "Prendre le 4ième + 1 (à partir du 5ième inclu) jusqu'à ce qu'il n'y ai plus de <p>&nbsp</p> et les supprimer"

    Mais comme résultat j'ai:

    <p>Text</p><p>&nbsp;</p><p>Text</p>

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    define('EMPTY_PARAGRAPH', '<p>&nbsp;</p>');
     
    $string = str_repeat(EMPTY_PARAGRAPH, 9);
     
    echo htmlentities(preg_replace('#(?:'.EMPTY_PARAGRAPH.'){5,}#is', str_repeat(EMPTY_PARAGRAPH, 4), $string));
    exit;
     
    ?>
    Ceci remplace les occurences (5 fois et plus) de paragraphes vides par 4 paragraphes vides.

    [Edit] Info : le modificateur "U" qui faisait foirer ta regex. Il l'empêchait de prendre autant de paragraphes que possible.

  8. #8
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci beaucoup ton code marche parfaitement. Par contre une question: pourquoi le {5,} puisqu'ensuite tu remplaces par 4x ma chaine? Moi je verrai plutot un {1, } pour tout prendre non?

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Dans ton premier message, tu dis "si elle se répète trop de fois à la suite". J'ai donc supposé que tu ne voulais pas que ça apparaisse plus de 4 fois mais qu'1, 2 et 3 sont des nombres possibles.
    Maintenant, je pense que tu peux l'adapter à tes besoins, n'est-ce pas ?

  10. #10
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Oui j'ai adapté. Mais avec ton code je croyais que ça laissait les 4 premiers termes, et les suivant étaient remplacés par 4 fois encore le termes (donc 8).

    L'essentiel c'est que ça fonctionne
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/05/2005, 14h34
  2. Réponses: 2
    Dernier message: 15/03/2005, 15h40
  3. Réponses: 4
    Dernier message: 16/04/2004, 16h31
  4. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38
  5. [SQL] Remplacer une table
    Par rstephane dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/05/2003, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo