[PHP] expressions regulières

Résolu/Fermé
jjvmaster Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 7 juin 2006 - 29 mai 2006 à 14:32
jjvmaster Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 7 juin 2006 - 30 mai 2006 à 08:35
Bonjour,
Malgré des nombreuses recherches sur Google et sur le Forum CCM je n'arrive toujours pas a me depatouiller des ces expressions regulieres.
Mon probleme est le suivant:
Je dispose d'un fichier texte qui est de cette forme :

Conducteur VALJEAN JEAN N° de matricule:0315092999
04/2006 Début Fin Amp Cond. Trav. Att. Doub. Repos Serv. T.E. Km Vt Nuit

Dim 2 22:01 24:00 1,99 1,92 0,08 1,99 1,99


Conducteur SUFFIT SAM N° de matricule : 033111111

Détail par Semaine - Découpage jour calendaire -
04/2006 Début Fin Amp Cond. Trav. Att. Doub. Repos Serv. T.E. Km Vt Nuit
Sam 1 0:36 5:12 4,61 3,73 0,62 0,22 0,05 4,56 4,56


( J'ai bien sur tronqué la majorité des informations et le fichier en lui même comporte un grand nombre de conducteurs.)

Mon but étant de récuperer le nom et le prenom de chaque Conducteur et de l'afficher dans une liste.
J'ai donc décidé d'utiliser les expressions regulieres mais malgré tout mes efforts mon code ne fonctionne pas:

<?

$fp = fopen("*****.txt","r");

while (!feof($fp))
{
$page .= fgets($fp,4096);
}

$chaine = eregi("Conducteur(.*) N°",$page,$res);
// je suis sur que c'est ici qu'est le probleme

for($i=0;$i<1000;$i++)
{
print($res[$i]);
print("<br>");
}
fclose($fp);
?>


Le probleme vient de la fonction eregi que j'ai du mal à manipuler.
Apparement l'élément "Conducteur(.*) N°" n'est pas bon. Pourtant la synthaxe me parait bonne (J'isole ce qui se trouve entre Conducteur et N° et je le rentre dans l' Array $res; je sais aussi que je devrais faire un for pour que chaque conducteur trouvé sois mis dans une case differente de l'Array mais vu que la premiere occurence ne marche pas je l'ai supprimé)

Ce que cela m'affiche:
En fait la fonction eregi rentre dans la premiere case de l'Array ce qui se trouve entre le Premier "Conducteur" et le Dernier "N°" du fichier texte ( J'ai donc 99% du fichier texte dans la premiere case du tableau et donc aucune liste ) , plutot que le "N°" qui se trouve juste apres.

Voila j'espere avoir exposé mon probleme correctement,
Merci aux futurs réponses et/ou aides.
A voir également:

3 réponses

cestadire.ch Messages postés 82 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 27 septembre 2006 31
29 mai 2006 à 16:53
//attention, ne marche que si le caractère "°"
//n'est présent que dans "N° de matricule"

preg_match_all("/Conducteur([^°]*)[N]/",$page,$res);

print_r($res[1]);
0
cestadire.ch Messages postés 82 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 27 septembre 2006 31
29 mai 2006 à 17:19
//ou plus simple...

preg_match_all("/Conducteur(.*)N°/",$page,$res);

print_r($res[1]);
0
jjvmaster Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 7 juin 2006
30 mai 2006 à 08:35
Ah en effet, je ne l'avais pas vu sous cette angle. Je m'etais inspiré du cours PHP de CCM avec l'exemple pour isoler une chaine :

$titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre

/* Le titre commence par <title>,

puis contient n'importe quelle chaîne,

et se termine par </title> */

Apparement j'avais mal compris..

En tout cas mille fois merci !! T_T T_T ( larmes de joie )
0