Expression regulieres en php

toujours_inquiete Messages postés 47 Statut Membre -  
toujours_inquiete Messages postés 47 Statut Membre -
Bonjour,
y a t il quelqu'un éveillé?
bon je rencontre un problème je débute avec les expression régulières en php
je sais écrire une expression régulière mais je sais pas trouver mon erreur
pouvez vous m'aider
je veux chercher toute les dates dans un fichier
voici mon code php
$ary=array();
$tab=file($F);
$lf=count($tab);
$ij=0;$data="";
while($ij<$lf){
$data=$tab[$ij];
echo $data;
$ex=".*([1-31]/-.[1-12]/-.[1900-2100]).*";
eregi($ex, $data, $ary);
echo $ary[1];
$ij++;
}
et voici le contenu de mon fichier exemple
Baraa
ESSTT
ECOLE
YAHOOO
date 12/09/2009 no 14-07-2008
et l'erreur est Warning: eregi() [function.eregi]: REG_ERANGE in C:\wamp\www\archives\test.php on line 15

Notice: Undefined offset: 1 in C:\wamp\www\archives\test.php on line 16
au nombre des ligne de fichier je n'est aucune idée pour corriger mon erreur
merci beacoup pour votre aide et bonne nuit
Configuration: Windows XP
Firefox 3.0.11

9 réponses

  1. imw Messages postés 233 Statut Membre 42
     
    Salut !

    moi je n'utilise pas ereg, mais preg ... me semble que c'est un peu plus rapide.

    pour ton expression, elle est déjà pas bonne ...
    il ne faut pas mettre le .* au début et à la fin, on s'en fous, il recherche dans le texte ...

    pour les nombres, le 1-12 n'est pas correct par exemple.
    en fait, il faut lui mettre entre [ ] les caractères autorisés (pas une valeur numérique), ce qui donne : [0-9].
    Ensuite, il faut préciser combien de caractèr du souhaite [0-9]{1,2} (1 ou 2 pour le mois)

    Tu veux aussi pouvoir séparer par / - .hors, le tiret et le . ont des sinifications précises ...

    en gros, au final, ça donnerai :
    ([0-9]{1,2}[ /\.-][0-9]{1,2}[ /\.-][0-9]{4})
    


    donc, a placer avec un preg par exemple :
    if( preg_match( "#([0-9]{1,2}[ /\.-][0-9]{1,2}[ /\.-][0-9]{4})#", $data, $ary ) )
    {
        echo $ary[1] ;
    }
    $ij++;
    


    en même temps, tu pourrait utiliser une seule variable texte pour tout le fichier (plutot que d'en faire un tableau)
    et utiliser ensuite un preg_match_all pour trouver toutes les dates du fichier.

    Ceci remplace tout ton code :
    data = file_get_contents($F);
    if( preg_match_all( "#([0-9]{1,2}[ /\.-][0-9]{1,2}[ /\.-][0-9]{4})#", $data, $ary ) )
    {
        foreach( $ary[1] as $v )
            echo $v ;
    }
    


    ATTENTION : j'ai rajouté un espace dans les [ ] pour les séparateur, pour que le forum les affiche bien ... si tu les laisse, tu pourra aussi récupérer les dates séparées par des espace.
    0
  2. toujours_inquiete Messages postés 47 Statut Membre 2
     
    vraiment 1000 merci pour votre réponse
    0
  3. toujours_inquiete Messages postés 47 Statut Membre 2
     
    bonjour imw je suis désolée mais ça ne m'affiche plus d'erreur mais ça n'affiche aucun résultat il ne retrouve pas les dates
    0
  4. imw Messages postés 233 Statut Membre 42
     
    c'est quoi les erreurs ?

    j'ai oublé le $ devant data à la première ligne ...

    pour le reste ça devrai être bon ...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. toujours_inquiete Messages postés 47 Statut Membre 2
     
    non j'ai corrigé mais le problème qu'il y a aucune erreur mais il ne retrouve aucune date
    0
  7. imw Messages postés 233 Statut Membre 42
     
    J'ai fait un essai avec ton exemple de texte et la dernière regex énoncée, et ça fonctionne très bien.

    $data = "Baraa
    ESSTT
    ECOLE
    YAHOOO
    date 12/09/2009 no 14-07-2008";
    if( preg_match_all( "#([0-9]{1,2}[ /\.-][0-9]{1,2}[ /\.-][0-9]{4})#", $data, $ary ) )
    {
        foreach( $ary[1] as $v )
            echo $v ;
    }
    


    Ton fichier est-il bien chargé ?
    teste un echo $data
    les années des dates ont toujours 4 chiffres ? sinon, faut mettre un {2,4} à la fin à la place du {4}
    0
  8. toujours_inquiete Messages postés 47 Statut Membre 2
     
    désolé je sais que c'est trop lourd de ma part mais ça ne marche pas
    voila encore mon code
    <?php
    //include "connexion.php";

    //rechercher dans le fichier
    $F="base/bb.txt";
    $inF = fopen($F,"r");
    $ary=array();
    $data = "Baraa
    ESSTT
    ECOLE
    YAHOOO
    date 12/09/2009 no 14-07-2008";

    if( preg_match( "#([0-9]{1,2}/\.-[0-9]{1,2}/\.-[0-9]{2,4})#", $data, $ary ) )
    {
    foreach( $ary[1] as $v )

    echo "v=".$v ;
    }

    fclose($inF);
    //fin recherche
    merci beaucoup
    0
  9. imw Messages postés 233 Statut Membre 42
     
    il faut les crochets [ /\.-] pour dire n'importe lequel de ces caractères. sinon, il les recherche tous ensemble, et forcément, ça ne marche pas
    0
  10. toujours_inquiete Messages postés 47 Statut Membre 2
     
    ok merci
    0