Expression regulieres en php

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. 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
    1. 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
      1. 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}
        1. non j'ai corrigé mais le problème qu'il y a aucune erreur mais il ne retrouve aucune date
          1. c'est quoi les erreurs ?

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

            pour le reste ça devrai être bon ...
            1. 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
              1. 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.