Help regexp

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Help regexp

par Uld » 19 août 2006, 13:27

Merci, c'est bien ce que je cherchais à faire.

par Ripat » 19 août 2006, 08:43

Si c'est vraiment toujours la même ligne qui revient et que seuls les caractères en rouge changent, c'est un cas très simple. Il suffit de reproduire la ligne et de capturer ce qu'il faut, au bon endroit.

Sans oublier d'échapper les caractères de cette ligne qui pourraient être des caractères de contrôle pour la regex, comme ? ou .

Mais attention, il faut que l'ordre des paramètres de l'ancre html ne change pas. Il faut que rien ne change sauf ce qui est à capturer. Pas la moindre virgule ou espace, sinon, ça ne marchera pas.

Le motif:

Code : Tout sélectionner

<a class="([^"]*)" style="top:(\d+)px; left:(\d+)px" href="plip.php\?x=(\d+)&y=(\d+)"><img src='img/(\d+)\.png'/></a>
$fichier = file_get_contents('/nom/du/fichier');
preg_match_all($motif, $fichier, $sortie);
echo '<pre>'; print_r($sortie);
Tes captures se trouvent dans le tableau $sortie[1] à $sortie[6]

par Uld » 18 août 2006, 22:30

Je ne suis pas sûr que ce soit vraiment ce dont j'ai besoin.

Je vais essayer d'expliquer clairement mon problème.

J'ai des centaines de fichiers stockés sur mon disque durs à analyser. Ce sont tous des .html avec un code source divers et varié, mais leur points commun c'est que je cherche à récupérer dans chaque fichiers, les lignes qui sont récurentes et qui sont formées de cette manière:

<a class="plop" style="top:50px; left:60px" href="plip.php?x=10&y=50"><img src='img/1.png'/></a>

Chaque fichier comporte des lignes dans ce genre, elles sont toutes semblable, seules les parties en rouges changent (je ne peux donc pas donc prévoir ce qu'elles contiendront).
Je cherche donc à récuperer ces parties rouges.

Ma méthode est donc d'aller lire un fichier:

Code : Tout sélectionner

$fd=fopen ('/home/.../fichier_xxx.html', "r"); $contents = fread($fd, filesize('/home/.../fichier_xxx.html')); fclose($fd);
de mettre tous sans retour chariot:

Code : Tout sélectionner

$contents=preg_replace (array("/\n/","/\r/","/\t/"),array("",""," "), $contents);
et ensuite d'aller pêcher tous mes petits paramètres rouges contenus dans la ligne html citée ci dessus pour ensuite les traiter et les stocker dans une base de données lambda.

Puis de passer au fichier suivant.

Je viens donc demander un peu d'aide pour trouver la meilleure manière de récuperer toutes ces choses...

Merci

par Cyrano » 18 août 2006, 22:08

Ta question est pas évidente et je suis pas certain de ce que tu cherches exactement à capturer. J'arrive à avoir tous les chiffres avec ceci:

Code : Tout sélectionner

#(?:[a-z]*(?::|=|/)(\d+)[a-z]*)+#
Mais est-ce que ça correspond à ce que tu cherches ?

Help regexp

par Uld » 18 août 2006, 21:47

J'ai un fichier remplis de lignes de ce type là:

Code : Tout sélectionner

<a class="plop" style="top:50px; left:60px" href="plip.php?x=10&y=50"><img src='img/1.png'/></a>
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à:

Code : Tout sélectionner

preg_match_all ("?????",$contents, $out, PREG_PATTERN_ORDER);
Quelle motif de recherche appliquer svp??

Merci d'avance, Uld