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 :

Par défaut pb regexp et Hexa


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Par défaut pb regexp et Hexa
    Bonjour,

    j'ai pas tout compris aux regexp avec les hexa, aussi je pose ma question ici en souhaitant que l'un d'entre vous aura la réponse.

    Voila, je souhaite rechercher une séquence Hexa dans une chaine, pour ça :
    Je génère une chaine d'hexa avec dechex() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0; $i<10; $i++) $chaine .= dechex(rand(0,1));
    et je veux chercher tous les 1:
    ce pattern ne me retourne rien.

    J'ai pourtant bien une chaine d'hexa, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#[[:xdigit:]]+#';
    il me retourne bien toute la séquence.
    Ou est le problème, qu'est ce qui m'a échappé ?
    Si quelqu'un a une idée...
    Merci.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 848
    Points : 6 535
    Points
    6 535
    Par défaut
    Bonjour,

    \x{1} correspond au caractère dont le code hexadécimal est 1. Il ne correspond pas au code hexadécimal du caractère 1.

    D'autre part, je trouve ton test très curieux. Je ne vois pas pourquoi tu génères une chaîne composée uniquement de 0 et de 1 pour voir si tu peux trouver des correspondances avec la classe [:xdigit:] (alors que la classe [01] suffit)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    et puis choisir entre 0 ou 1 que cela soit en décimal ou en hexadécimal, ça restera toujours 0 ou 1 -> dans ton code dechex() ne sert à rien.

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour

    merci pour d'avoir pris le temps de répondre.
    je m'explique : j'ai une chaine faite d'hexa : 1 puis fe puis 0 et enfin ff => 1fe0ff
    on voit donc que chaque hexa fait un 1 ou 2 caractères.
    Si je fais une simple recherche sur \w{2} le pattern me retournera ici
    1f / e0 / ff
    et ce n'est pas ce que je cherche.
    Aussi je pensais que la classe \x{n} était capable de reconnaitre non pas le seul caractère n, mais bien un hexa n, sur 1 ou 2 car. donc.

    Le choix de 0 ou 1 est totalement pifometrique, je voulais juste vérifier que \x{1} marchait. C'est tout. J'aurais pu prendre \x{fe} pour vérifier avec une chaine contenant fe.
    Bref, je n'y arrive toujours pas.
    Peut-être que $chaine=dechex(254) n'est pas au FORMAT Hexa.
    Je ne sais pas.
    Pour résumer, comment faire pour trouver
    1 / fe / 0 / ff
    dans la chaine hexa 1fe0ff ?
    Merci

  5. #5
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si ceci clarifie un peu l'issue?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $s="\x1\xfe\x0\xff";    //construire l'objet au départ
    $chaine='';    //le (hex) string l'op parle: 1fe0ff
    for ($i=0; $i<strlen($s); $i++) {
    	$chaine.=dechex(ord($s[$i]));
        }
    echo $chaine,"\n";
     
    preg_match_all('/./',$s,$matches);
    if (count($matches)!=0){
        foreach($matches[0] as $match) {
            echo dechex(ord($match)),"\n";
        }
    }
    Mais, à partir de $chaine '1fe0ff', ça serait très mal à agir, je pense, pour déterminer le sens de $chaine comme un string de caractère (? même élargi incluant les caractère de controle?) mis au format de hex par manque d'information: l'encodage (iso-xxxx, utf-8 ou quoi que ce soit) est un mais par tout...

Discussions similaires

  1. Unique + valeur par défaut
    Par ketalie dans le forum Outils
    Réponses: 4
    Dernier message: 02/07/2003, 16h29
  2. [TListBox] Selection par défaut
    Par Nuts07 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 12/05/2003, 11h00
  3. Couleur de sélection par défaut
    Par sicard_51 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/04/2003, 00h35
  4. [SWING][FONT] choisir la police par défaut
    Par narmataru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/02/2003, 11h35
  5. Retour au mode texte par défaut
    Par coca dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 12/12/2002, 18h22

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