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 :

Expression régulière débutant mettre texte en gras [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut Expression régulière débutant mettre texte en gras
    Re bonjour,
    Je cherche a remplacer du wiki texte par de l'html. Pour le coup j'ai des balises ['''] texte en gras [/'''] que je doit remplacer par <b>texte en gras</b>
    Je connais plusieurs soluces pour le faire mais la soluce qui m'intéresse bug.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $s_input = preg_replace("#\['''\](.*)\[/'''\]#",'<b>$1</b>',$s_input);
    Mon problème dans cette expression est qu'il est capable de gérer un chaine avec 1 fois les balises ['''] et [/'''], mais quand il y a plusieurs fois du gras dans la phrase alors il met en gras tous ce qui se trouve a partir de la première balises jusqu'a la dernière ce qui est logique ...
    est ce que quelqu'un peux me donner un coup de main ?
    Si je trouve pas la soluce alors je ferais un str_replaces de mes balises par des bonnes.

    Merci bon code.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    donne-nous un exemple mais c'est possible que le drapeau "U" règle [en partie] ton problème
    essayes : #\['''\](.*)\[/'''\]#U
    http://www.lumadis.be/regex/tuto_pcre.php#oU
    pour les explications sur le U

  3. #3
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Pour info je conseille d'utiliser <strong /> plutôt que <bold />. Strong signifiant la précense d'un mot sémantiquement fort.

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par Miaou le chat thon Voir le message
    donne-nous un exemple mais c'est possible que le drapeau "U" règle [en partie] ton problème
    essayes : #\['''\](.*)\[/'''\]#U
    http://www.lumadis.be/regex/tuto_pcre.php#oU
    pour les explications sur le U
    L'option U (ungreedy) règlera certainement le problème, mais je ne l'aime pas : trop spécifique aux fonctions preg.
    Utiliser le quantifieur minimal ? aura le même effet, mais sera plus portable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $s_input = preg_replace("#\['''\](.*?)\[/'''\]#",'<b>$1</b>',$s_input);
    Enfin, la solution la plus élégante devrait se rapprocher de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    $str = "[''']foo[/'''][''']bar[/''']['''][/''']";
     
    $reg = "#\['''\](((?!\[/'''\]).)*+)\[/'''\]#";
     
    $str = preg_replace($reg, '<b>$1</b>', $str);
     
    print_r($str);

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    str_replace ne serait pas plus adapté dasn cette configuration ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $chaine="['''] texte en gras [/'''] ";
    $out=array("[''']","[/''']");
    $in=array("<b>","</b>");
    $res=str_replace($out, $in,$chaine);
    echo $res;
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    str_replace ne serait pas plus adapté dasn cette configuration ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $chaine="['''] texte en gras [/'''] ";
    $out=array("[''']","[/''']");
    $in=array("<b>","</b>");
    $res=str_replace($out, $in,$chaine);
    echo $res;
    Si, et au niveau perfs il n'y aura pas photo.
    Mais le monsieur disait qu'il était intéressé par la solution PCRE.

    Et sur DVP, le client est roi.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut
    Merci a tous de vos réponses, je testerais les différentes soluces se soir en rentrant.
    encore merci.
    Bon code

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut
    Ce qui m'intéresse dans la solution preg_replace c'est pas les perfs, c'est plutôt le désir de réussir a résoudre mon problème avec cette solution et surtout de comprendre les différentes regex proposé.

    Sinon quelqu'un pourrais m'expliquer pourquoi dans ce cas la le str_replace est plus rapide, car j'entends souvent des gens dire que les expressions régulières sont super rapide. A partir de quelle "niveau" il devient intéressant de faire des expressions régulières pour des exemples simple comme celui ci ?

    Merci a tous.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut
    merci, ca marche marche bien mais je comprend pas tous !

  10. #10
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par newbie_php Voir le message
    Ce qui m'intéresse dans la solution preg_replace c'est pas les perfs, c'est plutôt le désir de réussir a résoudre mon problème avec cette solution et surtout de comprendre les différentes regex proposé.

    Sinon quelqu'un pourrais m'expliquer pourquoi dans ce cas la le str_replace est plus rapide, car j'entends souvent des gens dire que les expressions régulières sont super rapide. A partir de quelle "niveau" il devient intéressant de faire des expressions régulières pour des exemples simple comme celui ci ?

    Merci a tous.
    Félicitations, c'est en creusant les problèmes comme tu fais qu'on progresse.

    Les regex sont rapides pour le boulot qu'elles accomplissent, mais lorsqu'il s'agit de remplacer une chaîne fixe, elles ne sont pas vraiment utiles.

  11. #11
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par newbie_php Voir le message
    merci, ca marche marche bien mais je comprend pas tous !
    La deuxième expression est mise plus pour prouver qu'il existe plusieurs façons de faire. Elle est plus élégante à mon goût car plus précise sur la recherche, mais je dois avouer qu'elle doit être moins performante que la première.

    Pour la comprendre, je ne saurais trop te conseiller ce tuto :
    http://g-rossolini.developpez.com/tu...?page=sommaire

    Et bien sûr, la bible : http://general.developpez.com/livres...L9780596528126

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut
    Merci pour les liens je vais aller lire sa.
    Bonne continuation

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

Discussions similaires

  1. expressions régulières dans widget text
    Par Ruyneau dans le forum Tkinter
    Réponses: 5
    Dernier message: 16/02/2012, 08h32
  2. mettre texte en gras code behind
    Par meri_mima dans le forum ASP.NET
    Réponses: 5
    Dernier message: 19/11/2009, 15h44
  3. expression régulières et couleur texte
    Par patou41000 dans le forum C++/CLI
    Réponses: 5
    Dernier message: 10/07/2007, 22h59
  4. Expressions régulières : cibler du texte entre ligne vide, {
    Par lrbabe dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/02/2007, 10h49

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