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 :

Recherche dans une suite de nombres [RegEx]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Recherche dans une suite de nombres
    Bonjour à tous.

    J'essaie depuis qq tps d'écrire une expression reguliere me permettant de rechercher une certaine suite logique ds une suite de nombre.
    Je voudrais en fait trouver une suite commençant par 08 suivie de 14 chiffres et enfin 5 chiffres quelconques apres cette suite.
    Cette suite logique peut se repeter jusqu'à 2 fois ds ma suite de nombre et peut aussi ne pas apparaitre.
    Voici un exemple permettant de mieux comprendre :
    suite de nbre : 156489531082154687945638975413256898765
    suite logique recherchée :0821546879456389 75413
    voici mon expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $expression = '(08[0-9]{14})([0-9]{5})?((08[0-9]{14})([0-9]{5})?)?'
    Qd je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ereg($expression,$suite_de_nbre,$code);
    je ne retrouve pas les bonnes suites ds $code[1],$code[2],$code[4]et $code[5]
    et des fois $code[4]et $code[5] sont vides alors qu'ils devraient être remplies.
    D'où vient le pb?

    Merci pour votre aide.

  2. #2
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Euh c'est quoi exactement ce que tu recherches ?
    avec preg_replace tu peux faire ça. Apres il faut voir ce que tu veux recuperer, par quoi tu veux remplacer etc...

  3. #3
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Je viens de faire un essai avec preg_match :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
      preg_match('/(08[0-9]{14})([0-9]{5})?/', '156489531082154687945638975413256898765', $res);
      print_r($res);
    ?>
    et le résultat est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Array(
        [0] => 082154687945638975413
        [1] => 0821546879456389
        [2] => 75413
    )
    ce qui a priori correspond bien à ce que tu cherches ^^
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DelphiManiac Voir le message
    Je viens de faire un essai avec preg_match :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
      preg_match('/(08[0-9]{14})([0-9]{5})?/', '156489531082154687945638975413256898765', $res);
      print_r($res);
    ?>
    et le résultat est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Array(
        [0] => 082154687945638975413
        [1] => 0821546879456389
        [2] => 75413
    )
    ce qui a priori correspond bien à ce que tu cherches ^^
    Oui, merci pour ton aide.En effet, ce sont bien les resultats attendus;par contre lorsque la suite se complique je n'obtiens plus les bons resultats;
    exemple avec une suite de nbre contenant 2 suites logiques :
    15608149735648926499742368456329870816935468795643216549875651

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Korko Fain Voir le message
    Euh c'est quoi exactement ce que tu recherches ?
    avec preg_replace tu peux faire ça. Apres il faut voir ce que tu veux recuperer, par quoi tu veux remplacer etc...
    Je veux rechercher ma suite logique (08....) et ne rien remplacer.
    Merci

  6. #6
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    Hello,

    Et si tu remplaces preg_match par preg_match_all
    Ensuite tu accedes comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Array(
        [0][0] => 082154687945638975413
        [0][1] => 0821546879456389
        [0][2] => 75413
    )
    @+
    cadou
    LMN24 - Site d'actualité internationale multilingue
    http://www.lmn24.com

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par cadoudal56 Voir le message
    Hello,

    Et si tu remplaces preg_match par preg_match_all
    Ensuite tu accedes comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Array(
        [0][0] => 082154687945638975413
        [0][1] => 0821546879456389
        [0][2] => 75413
    )
    @+
    cadou
    Malheureusement, ça ne change rien au pb;
    Le pb apparait lorsque ma suite de nb est trop longue.
    En reprenant l'exemple au dessus je devrais avoir ce genre de résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Array(
        [0] => 081497356489264997423
        [1] => 0814973564892649
        [2] => 97423
        [3] => 081693546879564321654
        [4] => 0816935468795643
        [5] => 21654
    )
    si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_match('(08[0-9]{14})([0-9]{5})?((08[0-9]{14})([0-9]{5})?)?', 15608149735648926499742368456329870816935468795643216549875651, $res);
    Par contre mes res[3],res[4],res[5] sont vides.

    Merci pour votre aide.

  8. #8
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Je comprends pas trop où est le problème !

    Si sur l'exemple que je t'ai fourni, tu remplaces preg_match par preg_match_all :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
      $str = '15608149735648926499742368456329870816935468795643216549875651';
      preg_match_all('/(08[0-9]{14})([0-9]{5})?/', $str, $res);
     
      print_r ($res);
    ?>
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => Array
            (
                [0] => 081497356489264997423
                [1] => 081693546879564321654
            )
        [1] => Array
            (
                [0] => 0814973564892649
                [1] => 0816935468795643
            )
        [2] => Array
            (
                [0] => 97423
                [1] => 21654
            )
    )
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Ok j'essaie et je vous tiens au courant.

  10. #10
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci, ça marche nickel avec preg_match_all

    Bonne continuation et à bientot

    PS: juste une petite question (dsl mais j'ai pas trouvé ds mes recherches);
    j'avais utilisé cette expression '(08[0-9]{14})([0-9]{5})?((08[0-9]{14})([0-9]{5})?)?' et apparement celle-ci '/(08[0-9]{14})([0-9]{5})?/' est plus appropriée.
    Je voudrais savoir à quoi sert les / en debut et fin de chaine.
    Encore merci

  11. #11
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Quand tu utilises preg_, tu utilises la syntaxe PCRE. Ce sont des expressions regulieres créées pour PERL. Ce qui entoure la regex (ici /) correspond à ce qu'on appel les délimiteurs qui permettent d'integrer dans la regex les options. Comme par exemple "i" pour le dire insensible à la case. Ou encore "s" pour dire que le metacaractère "." integre aussi les sauts de ligne etc.

    Fait une recherche plus approfondie sur les PCRE sur developpez il y a de bon cours.

  12. #12
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Korko Fain Voir le message
    Quand tu utilises preg_, tu utilises la syntaxe PCRE. Ce sont des expressions regulieres créées pour PERL. Ce qui entoure la regex (ici /) correspond à ce qu'on appel les délimiteurs qui permettent d'integrer dans la regex les options. Comme par exemple "i" pour le dire insensible à la case. Ou encore "s" pour dire que le metacaractère "." integre aussi les sauts de ligne etc.

    Fait une recherche plus approfondie sur les PCRE sur developpez il y a de bon cours.
    Merci pour l'info.Je ne savais pas.
    Je vais suivre ton conseil et faire une recherche sur les PCRE.

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

Discussions similaires

  1. [XL-2007] Incrémenter une valeur dans une suite de nombre
    Par beast666 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/04/2009, 15h18
  2. Recherche d'une suite de nombre dans un String
    Par Diablo_22 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 11/09/2008, 13h15
  3. Recherche de mot précis dans une suite de mot
    Par Adrien38240 dans le forum C
    Réponses: 4
    Dernier message: 02/06/2008, 11h25
  4. Recherche d'un chiffre dans une chaine de nombres
    Par syldudu dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 27/10/2006, 10h55
  5. afficher une suite de nombres dans une string
    Par hysah dans le forum C++
    Réponses: 4
    Dernier message: 27/04/2006, 18h51

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