Expression régulières

Signaler
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
17 mars 2009
-
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007
-
Bonjour,

j'essaye de détecter une date au format DD/MM/YYYY grave à une expression régulière que j'ai toruvé ici :
http://www.regular-expressions.info/regexbuddy/datemmddyyyy.html

et grace au bout de code que j'ai trouvé là :
http://www.cppfrance.com/codes/EXPRESSIONS-REGULIERES-CPLUSPLUS-AVEC-ATL_34164.aspx
qui marche d'ailleur très bien.

Le problème c'est qu'avec l'expression régulière que je rentre, il ne detecte pas la date. Je suis quasiment sur que c'est une histoire de caractère d'échapement ou un truc comme ça.
Merci de votre aide

Voici mon code :

bool Student1::setDateOfBirth(string dateOfBirth)
{
    bool Result = false;
       
    //regular expression object
    CAtlRegExp <> regExp;
    //Construit l'expression régulière
    // Enter the format of the date of birth
    // Match a MM/DD/YYYY
    REParseError hParseError = regExp.Parse(
    "(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d" );
    if (hParseError == REPARSE_ERROR_OK)
    {
        // Object to compare the expression with the format
        CAtlREMatchContext <> matchDate;
       
        //on compare l'expression réguilère à un mail
       // La, ça ne detecte pas
        if(regExp.Match(dateOfBirth.c_str(),&matchDate))
        {
            // No problem with the expression
            Result = TRUE;
            // Set the date--
            this->dateOfBirth = dateOfBirth;
        }
    }
       
    return Result;
   
}

-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne

2 réponses

Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

Bonjour,

REParseError hParseError = regExp.Parse(
    "(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d" );
Donc avant de prendre cette expression régulière qui est un peu compliquée, je t'en propose une plus simple:
([0-9]+)\/([0-9]+)\/([0-9]+)
Donc essaye déjà avec ça que ça lit trois nombres (ayant au moins un chiffre chacun) séparés par des slashs
et dans ton expression au-dessus, il y a plusieurs problèmes à mon avis...
- le fait que ça veuille faire du control de date dès l'expression régulière
- que tu aies plusieurs symboles pour faire les séparateurs
-  tes [file://\\d \\d] à la fin
- c'est pas lisible et c'est pas forcément le rôle de ton expression régulière, du moins pas dans un premier temps
essaye celle que je t'ai proposée, et change au fur et à mesure si elle marche pour la rendre plus complexe.
mais je te conseille pas d'aller dans une solution qui fait tout
=

Une autruche ne se cuit pas aux petits lardons
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

Re

puis ça aurait dû être \d tout court, je pense surtout.
=

Une autruche ne se cuit pas aux petits lardons