Rechercher : dans
Par :

[PHP] expressions regulières

Dernière réponse le 30 mai 2006 à 08:35:31 jjvmaster, le 29 mai 2006 à 14:32:22 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « [PHP] expressions regulières » dans :
PHP - Expressions régulières Voir Qu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Vérifier le format d'une date en PHP VoirIl existe plusieurs méthodes pour verifier le format d'une date en PHP, vous pouvez par exemple découper la chaîne puis tester les valeurs de chaque élément. Plus simplement nous utiliserons les expressions régulières. Pour valider une date au...
[PHP] Transformer une URL en lien hypertexte cliquable VoirGrâce aux expressions régulières, il est possible de transformer en lien hypertexte toute URL de la forme http://URL (ou ftp://URL) ou bien commençant par www. :
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...
LaTeX - Expressions mathématiques VoirEcriture d'expressions mathématiques LaTeX possède un mode mathématique très développé qui permet l'édition d'équations ou de formules de façon simple et avec un bon rendu. LaTeX gère en effet tout seul la mise en page de ces formules. Il existe...

1

cestadire.ch, le 29 mai 2006 à 16:53:49

//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]);

Répondre à cestadire.ch

2

cestadire.ch, le 29 mai 2006 à 17:19:15

//ou plus simple...

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

print_r($res[1]);

Répondre à cestadire.ch

3

 jjvmaster, le 30 mai 2006 à 08:35:31

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 )

Répondre à jjvmaster
Collection CommentÇaMarche.net