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 :

problème de balises [Tutoriel] [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Points : 24
    Points
    24
    Par défaut problème de balises
    voila, j'ai un probleme de regex, je fais un petit BBcode mais j'ai un probleme avec les regex.
    Je prends ici les balises
    je voudrais que tout ce qui soit la dedans soit centre, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $body=eregi_replace("\[CENTER\](.+)\[/CENTER\]","<div style=\"text-align:center\">\\1</div>",$body);
    mais ca ne marche pas si j'ai plusieurs balises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [center]a[/center]b[center]c[/center]
    il ne prend que la premiere et la derniere

    je supprime donc les crochets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $body=eregi_replace("\[CENTER\](.[^][]+)\[/CENTER\]","<div style=\"text-align:center\">\\1</div>",$body);
    mais la ca va pas non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [center][b]hjhj[/b][/center]
    ca ne va pas, il y a des crochets a l'interieur

    je pense donc qu'il faut exclure
    et
    mais je ny arrive pas

    en gros je seche.

    avis aux pros del'expression reguliere.
    merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Essaye en rendant le + non gourmand avec ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $body=eregi_replace("\[CENTER\](.+?)\[/CENTER\]","<div style=\"text-align:center\">\\1</div>",$body);
    Mais à ta place j'utiliserais preg_replace avec les options i (casse) et s (dot match new line).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $txt='[center]a[/center]b[center]c[/center]';
     
    echo preg_replace('#\[CENTER\](.+?)\[/CENTER\]#si','<div style="text-align:center">\\1</div>',$txt);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        $body=eregi_replace("\[B\](.+?)\[/B\]","<b>\\1</b>",$body);
        $body=eregi_replace("\[I\](.+?)\[/I\]","<i>\\1</i>",$body);
    Warning: eregi_replace(): REG_BADRPT in /var/www/html/monslan.be/default/fonctions/fonctions.php on line 20 Warning: eregi_replace(): REG_BADRPT in /var/www/html/monslan.be/default/fonctions/fonctions.php on line 21

    je en comprends pas

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Désolé, c'est de ma faute!

    Le ? sur un quantifier comme * ou + ne marche que dans les regex pcre (je n'utilise jamais les posix qui sont plus lentes et plus limitées).

    Laisse donc tomber les ereg et autres ereg_replace et utilise les preg_match, preg_replace et compagnie. Qui offrent d'avantage de possibilités (options).

    Pour t'en convaincre:
    PHP supporte aussi des expressions rationnelles compatibles Perl, avec l'extension PCRE functions. Ces fonctions supportent des recherches non-gourmandes, des assertions, des sous-masques conditionnels et toute une gamme de fonctionnalités absentes des expressions rationnelles POSIX.
    (...)
    Note : preg_replace(), qui utilise la syntaxe des expressions rationnelles compatibles PERL, est une alternative plus rapide de ereg_replace().
    Essaye donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $body= "[center]centre[/center][B]bold[/B][I]italique[/I][center]centre 2[/center]";
    $body=preg_replace('#\[CENTER\](.+?)\[/CENTER\]#si','<div style="text-align:center">\\1</div>',$body);
    $body=preg_replace("#\[B\](.+?)\[/B\]#si","<b>\\1</b>",$body); 
    $body=preg_replace("#\[I\](.+?)\[/I\]#si","<i>\\1</i>",$body);
    ou plus structuré si tu as d'autres substitutions à faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $motif=array(
    	'#\[CENTER\](.+?)\[/CENTER\]#si',
    	'#\[B\](.+?)\[/B\]#si',
    	'#\[I\](.+?)\[/I\]#si');
    $remplace=array(
    	'<div style="text-align:center">\\1</div>',
    	'<b>\\1</b>',
    	'<i>\\1</i>');
     
    $body=preg_replace($motif,$remplace,$body);

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    rien ne peut mieux me convaincre qu'un truc qui marche

    merci beaucoup

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

Discussions similaires

  1. Problème de balise <iframe>.
    Par ox@na dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 25/03/2007, 22h02
  2. [XSLT] problème contenu balise / text
    Par zelastwarrior dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 18/12/2006, 11h25
  3. [XSLT] Problème de balise
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/10/2006, 10h53
  4. Problème avec balise <a href="file></a>
    Par tissard dans le forum Balisage (X)HTML et validation W3C
    Réponses: 25
    Dernier message: 07/06/2006, 10h59

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