Preg_match_all

Résolu
cs_Kloyd Messages postés 6 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 14 avril 2012 - 16 oct. 2009 à 14:26
cs_Kloyd Messages postés 6 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 14 avril 2012 - 18 oct. 2009 à 13:45
Bonjour j'aimerais recuperer à l'aide d'un Preg match all

hors du code ci-dessous:










Jean Herbert






5 001

rue des viviers 15

7390 Quaregnon, Belgique





Le numero de client, son nom, son adresse et sa localité,
ou au pire, le numero de client et le nom, suffiront.

à l'aide d'un preg match all comme di ci-dessous


$listeclient = clients.html
preg_match_all("*******",$listeclient,$lesclients,PREG_SET_ORDER);
foreach ($lesclients as $donneeclient) {
echo donneeclient[1]
echo donneeclient[1]
et si possible...
echo donneeclient[3]
echo donneeclient[4]}



Ce qu'il me manque (*****) c'est le $pattern, je bloque dessus depuis au moins 8h, j'arrive pas à cerner les chaines qu'il me faut.

7 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
16 oct. 2009 à 15:52
Salut,

Je sais pas si c'est optimisé, mais ça marche avec le code HTML que tu as donné en exemple (je ne donne que le pattern) :

`\s*([^<>]+)\s*
\s*\s*.*
(.*)`Uis


Question : j'imagine que le code HTML n'est pas généré sur ton serveur... ?

--
Neige

N'hésitez pas à lire la doc
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
16 oct. 2009 à 19:34
Ah ben alors tu devrais faire du code HTML plus propre ;)
Deux raisons à cela :
- ton code n'est absolument pas valide HTML3.2, 4.0 et encore moins XHTML1.x
- en pensant mieux tes balises HTML et en évitant les espaces sur plusieurs lignes, ton expression régulière gagnerait en rapidité. Par exemple, tu pourrais produire du code HTML comme ça :

<td class="img_client">
  [fiche_client=124.html ]
</td>
<td class="fiche">
  Jean Herbert

  

     5001

     
rue des viviers 15

     7390 Quaregnon, Belgique

  

</td>

Plusieurs points à noter :
- mieux vaut sortir la mise en forme (CSS) de la mise en page, afin de mieux gérer les modifications éventuelles et ultérieures
- utiliser autant que possible des éléments qui décrivent réellement le document, en utilisant des titres notamment, mais aussi en séparant dans des blocs séparés les éléments qui n'ont rien à voir (par exemple l'adresse n'a pas sa place dans le même bloc que l'ID, ou ce genre de chose). Ca ne change rien au niveau de l'affichage (et c'est tant mieux), mais ça permet de mieux comprendre le document quand tu en regardes la source. Conséquence, ça le rend plus accessible aux personnes/visiteurs qui n'ont pas un navigateur graphique (aveugles notamment, mais aussi moteurs de recherche). Bon, si c'est pour un intranet, ça n'a pas grande importance, si ce n'est prendre de bonnes habitudes pour d'autres cas ;)
- séparer les éléments permet de les retrouver plus facilement, que ce soit manuellement ou en utilisant un script avec une expression régulière. là, l'expression régulière que je t'ai donnée fonctionne. Mais si tu rajoutes un espace quelque part, il se peut que ça ne fonctionne plus. En utilisant des balises avec des ID, tu peux plus facilement localiser le texte que tu cherches.

Voilà voilà :)

--
Neige

N'hésitez pas à lire la doc
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
17 oct. 2009 à 21:15
Un excellent tuto : http://www.lumadis.be/regex/
Perso, c'est devenu ma référence. Il y a même un testeur qui permet de bencher différents masques pour voir lequel est le plus rapide.

Les regex, c'est pas le plus facile quand on apprend. Si en 6 mois t'en es là, avec Google, je dirais qu'a priori tu as un avenir prometteur.
Moi, ça fait seulement 1an ou 1an 1/2 que j'ai vraiment compris le truc... En partie grâce à ce tuto sur lumadis.

Et pas de problème, je reçoit un mail à chaque réponse, je suis donc le sujet ;)

--
Neige

N'hésitez pas à lire la doc
3
cs_Kloyd Messages postés 6 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 14 avril 2012
16 oct. 2009 à 14:29
evidement, le code se repete pour chaque client, mais j'ai oublié de le dire !!!
0

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

Posez votre question
cs_Kloyd Messages postés 6 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 14 avril 2012
16 oct. 2009 à 18:14
Merci beaucoup pour la rapidité de la réponse et surtout pour la doc mais je ne trouve pas un tuto avec la liste des codes de type (.*) [0-9], Uis, ... etc qu'on peut inserer dans les pattern.
Franchement merci. j'aurais du venir demander plus tot.

si si si c'est sur un de mes serveurs ext ^^
0
cs_Kloyd Messages postés 6 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 14 avril 2012
17 oct. 2009 à 07:11
J'ai deux ou trois question à te poser sur ce que tu viens de me donner comme conseil, mais je vais d'abord me concentrer sur la fin de mon script.
surveille ce post, je reviendrai d'ici peu.

J'ai tout appris grace à google, ce site et phpdebutant il y'a 6 mois de ca, et j'ai passé les etapes importantes à mon avis.

Par contre, j'aimerais si tu peux que tu me detailles comment tu as trouvé le pattern et/ou je pourrais trouver un tuto complet la dessus.

car je sais utiliser preg match mais le pattern et ses caractères, c'est du chinois pour moi et la doc est pas facile à trouver sur ca. si tu détailles déjà celui-ci et/ou si tu y ajoutes quelques trucs manquants qu'il faut savoir, je me débrouillerai pour essayer de maitriser.
0
cs_Kloyd Messages postés 6 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 14 avril 2012
18 oct. 2009 à 13:45
on dirait le nouveau testament pour moi ! :p juste de savoir que ca s'appelle regex c'est un pas. mais en plus ta doc est super complète. merci. ;)
0
Rejoignez-nous