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 :

Récupérer résultat fonction eregi [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Points : 74
    Points
    74
    Par défaut Récupérer résultat fonction eregi
    Bonjour,

    Je souhaiterais récupérer dans une variable "$resultat" une partie d'une chaîne de caractères "$original",
    mais la fonction PHP "eregi" que j'utilise ne renvoie aucun résultat.

    Chaîne initiale :">ligne1 ABCDE"
    Chaîne à récupérer : "ligne1"

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $original = ">ligne1 ABCDE"
    $resultat = eregi('^>[0-9]$',$original);
    print_r($resultat);
    Quelqu'un aurait une idée de l'erreur que j'ai pu commettre?

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Bonjour,

    Les fonctions ereg* sont à bannir car elles sont dépréciées et disparaitront dans une prochaine version de PHP. D'ailleurs PHP5.3 emet un E_DEPRECEATED lors de l'utilisation. Il faut donc dorénavant utiliser les fonctions preg_*

    Pour en revenir au problème et pour forcer l'utilisation des preg_*, votre masque ne contient que les caractères numériques, il faudrait rajouter les caractères alphabétiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $masque = '/^>([a-z0-9]*) [A-Z]*$/';
    $original = ">ligne1 ABCDE";
    preg_match($masque,$original,$resultat);
    print_r($resultat[1]);
    J'explique rapidement,

    La fonction preg_match() cherche une correspondance avec le masque. Celui-ci est assez simple à comprendre :

    - une chaine qui commence par > ^>
    - suivit par des chiffres ou des lettres en nombre infini [0-9a-z]*
    - puis un espace et encore des lettres mais en majuscule.

    Les masque doivent se situé au sein de caractères délimiteurs ( au choix de l'utilisateur ). Généralement on utilise / ou |

    Les parenthèses permettent la capture et celle-ci se retrouve dans le tableau $retour qui se compose ainsi :
    - 1ère case, la chaine correspondant au masque ( $retour[0] )
    - 2ème case, la première parenthèse capturante ( $retour[1] )
    - etc ..


    Je sais que j'ai modifié un peu les données du problème mais mieux vaut utiliser les bons outils

  3. #3
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup pour cette réponse!
    Cela fonctionne parfaitement.

    Par contre, lorsque j'entre exactement le même texte que "$original" dans un formulaire (sauf que j'effectue un retour à la ligne après ">ligne1"),
    celui-ci s'affiche bien grâce à la ligne "print_r($original);", et pourtant, "print_r($resultat[1]);" ne retourne aucune valeur.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $original = $_POST['original'];
    print_r($original); // Affichage à l'écran : ">ligne1 ABCDE"
    $masque = '/^>([a-z0-9]*) [A-Z]*$/';
    preg_match($masque,$original,$resultat);
    print_r($resultat[1]); // Affichage à l'écran : rien
    Cette fois-ci, faudrait-il changer quelque chose dans le code pour avoir "ligne1" comme retour de "print_r($resultat[1]);" ?

    J'ai essayé de changer le "$masque" en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $masque = '/^>([a-z0-9]*\n) [A-Z]*$/';
    mais cela n'a rien donné non plus...

  4. #4
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Si entre les deux termes, on peut avoir un escape, un retour chariot, on peut utiliser la classe générique [\s] pour remplacer notre espace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $masque = '/^>([a-z0-9]*)[\s]*[A-Z]*$/';

  5. #5
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup!
    Cette solution marche très bien

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

Discussions similaires

  1. [Flex4] Récupérer résultat d'une fonction dans une variable
    Par execrable dans le forum Flex
    Réponses: 8
    Dernier message: 13/04/2011, 09h53
  2. Récupérer résultat de la fonction execlp()
    Par aurel_67 dans le forum C
    Réponses: 2
    Dernier message: 10/04/2011, 22h40
  3. Réponses: 3
    Dernier message: 22/09/2010, 22h00
  4. Réponses: 5
    Dernier message: 30/06/2005, 10h28
  5. Réponses: 5
    Dernier message: 13/08/2004, 15h40

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