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
A voir également:

9 réponses

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
toujours_inquiete Messages postés 47 Statut Membre 2
 
vraiment 1000 merci pour votre réponse
0
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
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
toujours_inquiete Messages postés 47 Statut Membre 2
 
ok merci
0