Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre actif
    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 : 152
    Points
    152

    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
    Membre confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Inscrit en
    mars 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 221
    Points : 268
    Points
    268

    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 :
    ^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 :
    ^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 :
    ^0((5[^169]|7[23467]).|[23489][^2]).{6}$

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •