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 :

Motif <br/> pour preg_replace [RegEx]


Sujet :

Langage PHP

  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 598
    Points : 7 837
    Points
    7 837
    Par défaut Motif <br/> pour preg_replace
    Bonjour

    Je cherche à remplacer les <br/> d'un texte par des sauts de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       $motif[0]='/&nbsp;/';
       $remplacement[0]=' ';
       $motif[1]='/<br/';
       $remplacement[1]='
    ';
       $champ[8]=preg_replace($motif, $remplacement, $champ[8]);
    Mon problème, c'est que comme ça, je ne remplace que les <br et si je mets $motif[1]='/<br/>/'; ou $motif[1]='/<br///>/'; , j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: preg_replace() [function.preg-replace]: Unknown modifier '>' in /chemin/recup_fic_etu.php on line 40
    Si je mets $motif[1]='/<br//>/';, l'erreur est Unknown modifier '/'

    Que mettre ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre averti Avatar de makmaoui
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 283
    Points : 368
    Points
    368
    Par défaut
    Salut,

    si tu fais un simple remplacement tu peux utiliser la fonction str_replace(), cela va donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
     
    $chaine = str_replace('<br/>' , "\n" , $chaine);
     
    ?>

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 598
    Points : 7 837
    Points
    7 837
    Par défaut
    Merci

    Ça marche, mais j'ai l'impression d'avoir contourné le problème

    Je trouverais beaucoup plus joli d'avoir une commande de moins avec le preg_replace !
    Je cherche donc encore l'astuce , mais pour le moment, j'ai quelque chose qui marche !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 598
    Points : 7 837
    Points
    7 837
    Par défaut
    J'ai un problème plus grave pour la transformation inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      /*$motif[0]='/&nbsp;/';
      $remplacement[0]=' ';
      $motif[1]="/<br////>/";
      $remplacement[1]="\n";*/
      $info=str_replace(" ", "<br/>" , $info);
      $adresse=str_replace("\n" , "<br/>" , $adresse);
      $info=str_replace(' ',"&nbsp;" , $info);
      $adresse=str_replace(' ',"&nbsp;" , $adresse);
    La transformation de l'espace en &nbsp; ne marche même pas avec preg_replace
    Mais dans certains cas, il est pire... Parfois, même après le remplacement il me reste un saut de ligne : je me trouve avec alors que j'aurais souhaitéMais pas dans tous les cas !!!!

    preg_replace est beaucoup plus intéressant dans mon cas car je traite plusieurs chaînes en même temps !

    J'espère que la nuit va porter conseil ! Bonne nuit à tous
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 305
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 305
    Points : 15 633
    Points
    15 633
    Par défaut
    Citation Envoyé par troumad Voir le message
    preg_replace est beaucoup plus intéressant dans mon cas car je traite plusieurs chaînes en même temps !
    "str_replace" permet aussi ça en mettant des tableaux comme arguments
    par contre tu as besoin de connaitre la liste entière des modifications possibles. est ce que tu as juste besoin de modifier "<br>" et "<br/>" ou bien tu dois aussi traiter <bR> ou "<br />" par exemple ?

  6. #6
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 598
    Points : 7 837
    Points
    7 837
    Par défaut
    Bonjour

    Pour les changements, c'est juste :
    - <br/> => saut de ligne
    - &nbsp; => espace
    Il n'y aura rien autre.

    Je me dis de plus en plus qu'il faudra que je cherche à comprendre les expressions régulières ! À quand le courage final ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 598
    Points : 7 837
    Points
    7 837
    Par défaut
    Bon, il me semble que ça marche !
    Mon problème venait du symbole que j'utilisais pour encadrer mon expression régulière !

    Si j'ai compris (à vous de me dire si je me trompe), le premier caractère est choisi pour encadrer l'expression, donc pour encadrer on a beaucoup de choix (mais pas les caractères ou \).
    Ceci donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       $motif[0]='`&nbsp;`';
       $remplacement[0]=' ';
       $motif[1]="`<br/>`";
       $remplacement[1]="\n";
       $champ[8]=preg_replace($motif, $remplacement, $champ[8]);
       $champ[9]=preg_replace($motif, $remplacement, $champ[9]);
    dans un sens et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      $motif[0]='&nbsp;';
      $remplacement[0]='`[ ]`';
      $motif[1]="<br/>";
      $remplacement[1]="`[[:cntrl:]]`";
      $adresse=preg_replace($remplacement, $motif, $adresse);
      $info=preg_replace($remplacement, $motif, $info);
    dans l'autre.

    Je pensais qu'un simple échange de remplacement et motif dans preg_replace allait suffir : je me trompais encore !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #8
    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

    Pour le remplacement newline/tag, tu devrais utiliser la fonction nl2br()

    Sinon, voici une regex pour le remplacement tag/newline :

  9. #9
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 598
    Points : 7 837
    Points
    7 837
    Par défaut
    Citation Envoyé par Yogui Voir le message
    Pour le remplacement newline/tag, tu devrais utiliser la fonction nl2br()
    Crois-tu qu'elle est plus complète que le système que je propose ?
    Si oui, pourquoi ?

    Citation Envoyé par Yogui Voir le message
    Sinon, voici une regex pour le remplacement tag/newline :
    Je ne comprends pas exactement ce que fait ceci
    le \s sert à quoi ? il marque l'espace ? Je ne vois pas ça sur la doc que je regarde ! Avec le * qui indique qu'il peut en avoir plusieurs ou aucun ?
    le /? indique que le / peut être absent.
    Comme je connais l'origine de mes fichiers, je n'ai pas besoin de cet artéfact
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  10. #10
    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
    Au temps pour moi, si tu connais l'origine de tes fichiers alors tu n'as pas besoin de regex. Utlise une simple fonction de remplacement de chaînes, cela fera gagner tes scripts en légèreté (quantité de mémoire + temps d'exxécution).
    De manière générale, une regex sans classe ni wildcard n'a aucun intérêt.

    Sinon oui, tu as bien compris la regex que je te proposais

    Et pour nl2br, c'est tout simplement la fonction prévue à cet effet

  11. #11
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 598
    Points : 7 837
    Points
    7 837
    Par défaut
    Citation Envoyé par Yogui Voir le message
    Et pour nl2br, c'est tout simplement la fonction prévue à cet effet
    Je la mets en commentaire dans mon code. Pour le moment, je trouve plutôt bien l'idée de faire un tableau pour modifier toutes mes chaînes en une seule instruction preg_replace($remplacement, $motif, $adresse);.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  12. #12
    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
    Si tu regardes les benchmarks effectués par Mathieu Fernandez, tu verras qu'éviter preg_replace() est souvent appréciable
    http://m-fernandez.developpez.com/ar...p/bench/#LVIII

  13. #13
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    j'avais le même problème
    Merci pour les infos ça m'aide beaucoup dans mon code.

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

Discussions similaires

  1. [RegEx] Regex pour preg_replace avec exclusion
    Par Aqua-Passion.com dans le forum Langage
    Réponses: 2
    Dernier message: 17/07/2011, 20h41
  2. Réponses: 0
    Dernier message: 29/12/2008, 15h18
  3. Réponses: 0
    Dernier message: 29/12/2008, 15h18
  4. [RegEx] Motif simple mais introuvable pour PCRE
    Par Tchupacabra dans le forum Langage
    Réponses: 15
    Dernier message: 09/06/2008, 11h51
  5. [RegEx] Affichage des balises pour preg_replace
    Par freedev dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2007, 15h26

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