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 rationnelle [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut Expression rationnelle
    Bonjour,

    J'essaye de mettre en place une expression régulière pour détecter l'utilisation de la couleur dans les logs irc.
    Elle se présente sous la forme suivante :

    ¤ nombre virgule (ou pas) nombre (ou pas) texte

    ¤ est le caractère utilisé pour déclarer la couleur
    nombre peut aller de 0 à 15

    Cela peut donner par exemple :
    ¤7,15 ou ¤1 ou ¤12,3

    (le tout est, bien sûr, suivi de texte mais se trouvera toujours en début de phrase)

    J'ai tenté avec ces expressions sans succès :
    ¤([0-9]{1,2}),{0,1}([0-9]{0,2})
    "/^¤[:digit:]{1,2}(,)?[:digit:]{1,2}/

    Quelqu'un a-t-il une meilleure suggestion ?

    Merci

  2. #2
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    Ptete ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Marche pas

    Et d'ailleurs j'ai dit une connerie, ça ne sera pas forcément en début de phrase (pour mes tests ça l'est).

  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
    Mets nous une liste d'exemples de tous les cas possibles. Sinon on va travailler par tâtonnements.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    texte¤10,12blabla
    texte¤7,2blabla
    texte¤10blabla
    texte¤5blabla

    concrètement c'est ça, il y aura forcément du blabla après mais pas forcément de texte avant

  6. #6
    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 ce masque (à utiliser avec les fonctions PCRE):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ¤\d{1,2}(?:,\d{1,2})?
     
    //Comme par exemple:
    $txt = preg_replace('#¤\d{1,2}(?:,\d{1,2})?#', 'CodeCouleur', $txt);
     
    // ou bien
     
    if (preg_match('#¤\d{1,2}(?:,\d{1,2})?#', $txt)){
      echo 'code couleur détecté';
    }

  7. #7
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    P'tite rectification

  8. #8
    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
    Citation Envoyé par Linaa
    P'tite rectification
    Il conviendrait de mettre tout le groupe décimal en option sinon tu risque de matcher la virgule dans texte¤5,texte en couleur (virgule qui doit être mise en couleur code 5).

    Pour reprendre ton motif, tu pourrais donc plutôt faire:

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Tiens, mon message n'est pas passé.

    Je disais donc que le pattern de ripat marche très bien, merci

    Merci à vous deux

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Par contre, quand je le stocke dans une variable, que j'appelle ensuite avec preg_match, cela ne marche plus.

    $pattern_clr_src = '#'.chr(3).'\d{1,2}(?:,\d{1,2})?#';

    (j'avais remplacé ici le chr(3) par le ¤ car il ne passe pas dans les formulaires)

    Une idée ?

  11. #11
    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
    chr(3) n'existe sans doute pas dans ton texte.

    Vérifie bien le code ascii du caractère qui précède tes codes couleur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function montrerAscii($txt){
      $len = strlen($txt);
      for ($i = 0; $i < $len; $i++){
        echo $txt[$i].' --> '.ord($txt[$i]).'<br />';
      }
    }

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    En fait il existe bien mais je viens de tomber sur un problème bizarre.

    Mon code est en classe :
    private $pattern_clr = chr(3);

    Erreur sur la ligne.

    Je le passe en fonctions :
    $pattern_clr = chr(3);

    Tout marche.

    On dirait que la fonction chr() n'est pas autorisée dans une classe.

  13. #13
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Essaie aussi de ne pas intialiser tes variables lors de la déclaration mais lors de l'instanciation.

    Ce que tu fais actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class taclasse{
    private $pattern_clr = chr(3); 
    publlic function __constrcut(){}
    }
    Ce qui serais mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class taclasse{
    //Décalaration
    private $pattern_clr;
    publlic function __constrcut(){
    // Attribution des valeurs
    $this->pattern_clr = chr(3); 
     
    //Des actions x y
    }
    }
    Tu peux ausi vérifer le niveaux de visibilité, cf http://fr.php.net/manual/fr/language.oop5.visibility.php

    bye

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Rhaaaaaaaa ça marche.
    Grand merci ePoX, ça me posait des problèmes depuis ce matin et en désespoir de cause je m'étais débrouillé d'une autre façon, moins paramètrable.

    Bon, tout fonctionne comme je le souhaitais (je toucherai plus au PCRE d'ici un moment je crois)

    Merci à vous tous, il ne me reste plus qu'à sortir ça en GPL et à vous citer

  15. #15
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    de rien penses à mettre le tag résolu

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Voilà

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

Discussions similaires

  1. [RegEx] PHP et expressions rationnelles
    Par stk dans le forum Langage
    Réponses: 2
    Dernier message: 17/04/2006, 22h07
  2. Non ambiguïté d'expressions rationnelles
    Par David.Schris dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 27/12/2005, 16h11
  3. [RegEx] Images et expression rationnelle
    Par Invité dans le forum Langage
    Réponses: 7
    Dernier message: 30/10/2005, 15h50
  4. Réponses: 2
    Dernier message: 21/02/2005, 10h42
  5. [langage] Expressions rationnelles (perl/C)
    Par ma2th dans le forum Langage
    Réponses: 11
    Dernier message: 02/08/2004, 18h07

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