[PHP] expressions regulières

Résolu
jjvmaster Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
jjvmaster Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   31
 
//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   Statut Membre Dernière intervention   31
 
//ou plus simple...

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

print_r($res[1]);
0
jjvmaster Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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