J'ai un fichier remplis de lignes de ce type là:
< a class="plop" style="top:50px; left:60px" href="plip.php?x=10&y=50" >< img src='img/1.png'/ >< /a >
(Je sais pas comment publier du html sur templeet, ca à l'air d'être filtré... )
Avec le contenu de class variable, 50, 60, 10 et 50 variables et le '1' .png aussi.
Je cherche à recupérer les valeurs de ces paramètres avec preg_match_all en php.
Qqchose dans ce genre là:
preg_match_all ("?????",$contents, $out, PREG_PATTERN_ORDER);
Quelle motif de recherche appliquer svp??
Merci d'avance
# Ca ira, mais...
Posté par duaner . Évalué à 4.
<a\s+class="([^"]+)"\s+style="top:(\d+)px;\s+left:(\d+)px"\s+href="plip\.php\?x=(\d+)&y=(\d+)"\s*><img\s+src='img\/(\d+)\.png
ca va fonctionner, mais c'est généralement une très mauvaise idée de parser du html avec des expressions regulières, et ce que tu demandes la est tres rigide (par ex. quid si x et y ou top et left sont inversés, ou les différents attributs...?),je conseillerais plutot un parser html ou xml, ca doit bien exister en php :)
[^] # Re: Ca ira, mais...
Posté par LaBienPensanceMaTuer . Évalué à 1.
Sinon, tu parles de problème au cas ou x et y sont inversés etc... c'est simplement parce que la solution que tu proposes est trop rigide.
En cherchant une multitude de fois un motif d'attribution de valeur (cf mon post plus bas), plus aucun problème...
Derrière ça, je conçois parfaitement qu'un parsing manuel sera beaucoup plus souvent sujet au bugs qu'une solution déjà écrite.
A ce sujet, il existe un certain nombre de modules dédiés à cette tâche:
[^] # Re: Ca ira, mais...
Posté par duaner . Évalué à 1.
Le probleme du HTML est qu'il a une structure recursive (et il correspond à la definition d'un CSL), et que meme si tu arrives à extraire des infos d'un document HTML avec des expressions régulières, ca ne pourra fonctionner que si tu es sur à 100% de ce que tu vas parser (d'ou mon "rigide").
Exemple (HTML valide):
<a href="</a>" <!-- >Ca pourrait s'arreter ici</a> --> >bleh<!-- ou encore ici... </a> --></a>
Tu n'arriveras jamais à t'en sortir avec une seule expression, du moins pas avec PCRE qui ne supporte pas les ??{}, tout simplement parce que tu n'as aucune idée de l'etat dans lequel tu te trouves au moment ou tu rencontres le 1er, 2eme, 3eme ou 4eme </a>
J'ai jamais dit que ma solution était bonne, j'ai juste répondu éxactement à ce qu'il voulait (un match, pistou.), à ses risques et périls.
# There's more than one way to do it
Posté par LaBienPensanceMaTuer . Évalué à 4.
#!/usr/bin/perl
while(<STDIN>){
while(/(top|left|x|y)(:|=)(\d+)/g){ print "$1 => $3\n"; }
}
[binarym@trait-plat]:~% cat file
< a class="plop" style="top:50px; left:60px" href="plip.php?x=10&y=50" >< img src='img/1.png'/ >< /a >
[binarym@trait-plat]:~% cat file| perl test.pl
top => 50
left => 60
x => 10
y => 50
[binarym@trait-plat]:~%
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.