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 d'array / regex [Débutant(e)] [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut problème d'array / regex
    Voila , j'aimerais que les smiley dans mes articles s'affiche et j'ai une erreur lamentable qui m'est arrivé en pleine face.

    Aprés quelques modif acharnée je m'en remet à vous

    Voici mon code, pour l'instant qu'un smiley pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $smilies = array('^_^');
    $smilies_url = array('yep.gif');
    foreach($smilies as $smilie){
    	$text = preg_replace('(\s|\r|^|&gt;)'+$smilie[i]+'(\s|\r|^|&gt;)', '$1<img src="image/smiley/'+$smilies_url[i]+'" alt="Smiley" class="smilies" />$2',$text);
    }
    et l'erreur :

    preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash
    je pense foirer dans la regex a cause d'une erreur de manip du foreach...

    Merci d'avance pour l'aide apporté.

  2. #2
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    La concaténation en php, c'est le . pas le +

    Ou sont les délimiteurs du motif de recherche ?

  3. #3
    Membre habitué Avatar de Sarrus
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Points : 138
    Points
    138
    Par défaut
    l'erreur du preg_replace, litteralement : le délimiteur (séparateur) ne peut pas etre alphanumerique ou backslash

  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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    preg_replace("#(\s|\r|^|&gt;)$smilie[i](\s|\r|^|&gt;)#", '$1<img src="image/smiley/'.$smilies_url[i].'" alt="Smiley" class="smilies" />$2',$text);
    }
    C'est pas sûr que ça marche (je fais vite) mais y aura du mieux

  5. #5
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    rah le boulet, ça m'apprendra a vouloir passer a la va vite de mon code javascript a un code php >_<

    j'ai testé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $smilies = array('^_^');
    		$smilies_url = array('yep.gif');
    		foreach($smilies as $smilie){
    			preg_replace("#(\s|\r|^|&gt;)".$smilie[i]."(\s|\r|^|&gt;)#", '$1<img src="image/smiley/'.$smilies_url[i].'" alt="Smiley" class="smilies" />$2',$text);		
    		}
    pas d'erreur mais sa remplace pas ^_^ dans ma chaine par l'image :/

  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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    smilie n'est pas un tableau, pourquoi mettre $smilie[i] ?

  7. #7
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    erreur de ma part

    j'ai enlever le [i] mais sa marche toujours pas

  8. #8
    Membre averti Avatar de camyo
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2004
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2004
    Messages : 400
    Points : 386
    Points
    386
    Par défaut
    je vais peut etre dire une co**erie mais

    elle est defini ou la valeur de $smilie??

  9. #9
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Normal, c'est malin aussi de prendre des métacaractères... !!!

    Essaies ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $smilies = array('\^_\^');

  10. #10
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    j'avais essayé et sa marchais pas

  11. #11
    Membre habitué Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Points : 169
    Points
    169
    Par défaut
    suggestion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $smilies[]=array('text'=>'^_^','url'=>'yep.gif');
    $smilies[]=array('text'=>':)','url'=>'smile.gif');
    foreach($smilies as $smilie) {
      $text=preg_replace('#(^|\W)'.preg_quote($smilie['text']).'(\W|$)#s','$1<img src="image/smiley/'.$smilie['url'].'" alt="Smiley" class="smilies" />$2',$text);
    }

  12. #12
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut Daniel, on se retrouve sur des regexp


    Alors pour les tableaux, que je voulais déjà utiliser la dernière fois, il y a une fonction intégrée que je trouve très smart. Extrait de php.net :

    replacement

    La chaîne ou un tableau de chaînes pour le remplacement. Si ce paramètre est une chaîne et le paramètre pattern est un tableau, tous les masques seront remplacés par cette chaîne. Si les paramètres pattern et replacement sont des tableaux, chaque pattern sera remplacé son replacement associé. Si replacement à moins d'éléments que pattern, alors une chaîne vide est utilisée pour le reste des valeurs.
    Exemple 1815. Utilisation de tableaux indexé avec preg_replace()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $string = 'Le renard marron agile saute par dessus le chien paresseux.';
    $patterns[0] = '/agile/';
    $patterns[1] = '/marron/';
    $patterns[2] = '/renard/';
    $replacements[2] = 'grizzly';
    $replacements[1] = 'brun';
    $replacements[0] = 'lent';
    echo preg_replace($patterns, $replacements, $string);
    ?>
    L'exemple ci-dessus va afficher :

    Le grizzly brun lent saute par dessus le chien paresseux.
    Ca devrait être pas mal utile pour les smilies...
    Pour plus de détails, php.net en parle vachement mieux que moi.

  13. #13
    Membre habitué Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Points : 169
    Points
    169
    Par défaut


    Citation Envoyé par jml94
    Ca devrait être pas mal utile pour les smilies...
    tout à fait, mais ce n'est pas non plus une garantie de lisibilité.

  14. #14
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Exact !

    C'est pour cela que personnellement, je passerais tout ce traitement à une classe métier, avec une méthode du genre $Smilie('^_^') qui retourne le smilie qui va bien.

  15. #15
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    j'ai choisi la methode de daniel61 et ça marche pas mal mais c'est moins jolie que mes deux tableaux qui marche pas ^^

    merci à tout les deux en tout cas !

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

Discussions similaires

  1. [Tableaux] Problème d'array dynamique
    Par Peacecraft95 dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2006, 15h24
  2. [RegEx] Problème avec les regex
    Par dragon noir dans le forum Langage
    Réponses: 3
    Dernier message: 24/07/2006, 11h26
  3. Problème avec une RegEx
    Par Death83 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 26/05/2006, 14h03
  4. Problème+for+array+get
    Par xmane85 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/05/2006, 17h35
  5. Problème d'array...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/04/2006, 08h39

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