Expression régulières

poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009 - 5 oct. 2007 à 22:06
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 - 10 oct. 2007 à 09:42
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

The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
10 oct. 2007 à 09:40
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
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
10 oct. 2007 à 09:42
Re

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

Une autruche ne se cuit pas aux petits lardons
0
Rejoignez-nous