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 :

Matcher une série de chiffre précise


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 175
    Points : 193
    Points
    193
    Par défaut Matcher une série de chiffre précise
    Bonjour,
    Je me permets de venir à vous afin d'optimiser une regexp.
    Je cherche à matcher les suite de chiffre se composant de la façon suivante:
    Groupe 1:
    - 02 + 7digits (sauf 022)
    - 03 + 7digits (sauf 032)
    - 04 + 7digits (sauf 042)
    - 08 + 7digits (sauf 082)
    - 09 + 7digits (sauf 092)

    Groupe 2:
    - 072 + 7digits
    - 073 + 7digits
    - 074 + 7digits
    - 076 + 7digits
    - 077 + 7digits
    - 050 + 7digits
    - 052 + 7digits
    - 053 + 7digits
    - 054 + 7digits
    - 055 + 7digits
    - 057 + 7digits
    - 058 + 7digits

    De plus, chaque préfixe ne peut pas être suivit d'un 0 ou d'un 1.

    La requête ^(02|03|04|08|09)[3-9].{6}$ me permet de matcher le groupe 1.
    La requête ^(050|052|053|054|055|057|058|072|073|074|076|077)[2-9].{7}$me permet de matcher le groupe 2.

    Est-il possible d'améliorer ses deux requêtes et surtout est-il possible de ne faire qu'une seule et même requête pour matcher l'ensemble des deux groupes?

    Cordialement,
    Julien

    EDIT: la requête ^((02|03|04|08|09)[3-9]|(050|052|053|054|055|057|058|072|073|074|076|077)[2-9]).{6}$semble faire l'affaire mais.. ya-til possibilité de l'améliorer?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Bonjour,
    tu peux améliorer en factorisant un peu plus (ie: le zéro est commun à tous tes nombres par exemple), en utilisant les classes de caractères prédéfinies (\d), voire les intersections de classes si c'est plus court que d'énumérer tous les éléments ([\d&&[^2]]=tous les chiffres sauf 2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^0([23489][\d&&[^2]]|(5[0234578]|7[23467])\d)\d{6}$
    mais si tu n'as que des nombres et pas d'autres caractères du tout, tu peux faire plus court:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^0([23489][^2]|(5[^169]|7[23467]).).{6}$
    Aprés tu peux encore optimiser sachant que la regex est analysée de gauche à droite. Si par exemple tu sais à l'avance que les nombres en 05 et 07 sont plus courants, tu peux inverser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^0((5[^169]|7[23467]).|[23489][^2]).{6}$
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Générer une série de chiffres aléatoire dans un tableau
    Par ptitdje dans le forum Général Python
    Réponses: 4
    Dernier message: 10/06/2010, 23h06
  2. Exclusion d'une série de chiffres
    Par js8bleu dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/04/2010, 08h21
  3. Trouver une série de chiffres dans du texte
    Par Sancti_Eyes dans le forum Langage
    Réponses: 4
    Dernier message: 25/08/2009, 22h54
  4. créer une série de chiffre aléatoire dans une plage donnée, sans doublon
    Par ProgElecT dans le forum Vos contributions VB6
    Réponses: 4
    Dernier message: 02/07/2008, 10h02

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