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 :

problème avec preg_match [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut problème avec preg_match
    Bonjour à tous,

    vous allez p-e me gronder parce que c'est une erreur classique mais j'ai un problème avec la fonction preg_match...

    Voici tout de suite mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $date = '15/01/1988'
    $pattern = '([0-9]{2})[/]{1}([0-9]{2})[/]{1}([1-2]{1}[0-9]{3})';
    if (preg_match($pattern, $date, $m) && checkdate($m[2], $m[1], $m[3])) {
    	echo $m[2] . '-' . $m[1] . '-' . $m[3];
    }
    L'erreur que ca me retourne est :

    Warning: preg_match() [function.preg-match]: Unknown modifier '[' in C:\Program Files\wamp\www\vigiphone\app_code\edtPatient.php on line 26

    Je ne comprends pas pourquoi, l'expression régulière me semble correcte et si j'ai bien compris, preg_match va mettre dans le tableau $m le résultat qu'il trouve pour chaque parenthèse capturante. Je ne comprends donc pas l'erreur qu'il me retourne...

    Le but de mon code est que la date que l'on a rentré en francais du style 'jj/mm/aaaa' soit transformé en date prête à insérer dans une table MySQL : 'yyyy-mm-dd'

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    On va dire que c'est résolu...

    D'une part, j'avais oublié des parenthèses pour mes séparations (/-) des différents éléments de la date...

    et après, je ne sais pas pourquoi il le faut mais il le faut, j'ai ajouté '#' et '#D' au début et à la fin respectivement.

    Si quelqu'un voudra bien m'expliquer car je n'ai pas vu d'explication sur php.net ou sur d'autres sites.

    Merci d'avance.

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Une expression réguliere preg_... est une expression réguliere PERL (d'ou le P)
    Or, ces expressions doivent etre préfixé et postfixée par un caractere (celui de ton choix) afin de pouvoir ajouter des modificateurs apres le caractere postfixe.

    En bref :

    Les expressions regulieres PERL suivantes ne sont PAS valides :
    .*
    .+
    a+

    Les expressions regulieres PERL suivantes sont valides :
    #.*#
    /.+/
    @a+@

    Historiquement, c'est le caractere / qui devait etre utilisé, mais PERL a évolué et a autorisé d'autres caracteres. Il est préférable de nos jours d'utiliser le caractere # qui est en général pas présent dans les expressions régulieres elle meme. En effet, l'utilisation du caractere / oblige a l'echapper s'il apparait dans l'expression.
    Ainsi, on doit ecrire "/<i>.+<\/i>/" ce qui est moins lisible que "#<i>.+</i>#"

    Quand au "D" que tu as mis apres le #, il s'agit d'un modificateur.
    Une liste est dispo dans la doc officielle ICI
    Dans ton cas... il ne sert absoluement a rien puisque tu n'utilise pas le meta caractere de fin de chaine $ (dollar)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    Merci beaucoup de cette réponse très précise. Je ne connaissais pas du tout cette liste là. Je vais la mettre de suite dans mes marques pages et retirer ce 'D'!

    Résolu!

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

Discussions similaires

  1. [RegEx] Problème d'extraction avec preg_match
    Par discochami dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2013, 18h57
  2. Problème avec fonction preg_match
    Par lebanner82 dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2012, 04h08
  3. [RegEx] problème avec preg_match()
    Par samuel4256 dans le forum Langage
    Réponses: 11
    Dernier message: 24/10/2010, 15h20
  4. [RegEx] problème avec preg_match
    Par othmane126 dans le forum Langage
    Réponses: 1
    Dernier message: 15/10/2007, 15h04
  5. Réponses: 23
    Dernier message: 24/05/2007, 10h32

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