preg_match_all et parsing html

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 : preg_match_all et parsing html

Re: preg_match_all et parsing html

par damaskinos » 02 oct. 2009, 18:57

Merci beaucoup,

Ca fonctionne parfaitement.

merci.

Re: preg_match_all et parsing html

par Victor BRITO » 02 oct. 2009, 18:49

Bienvenue dans l'univers des captures gloutonnes ! ;)

Pour y remédier, il y a deux solutions :
  1. soit tu utilises le ? après le quantifiant du masque
    preg_match_all ('#<b[^>]*?>(.*?)</b>#i', $str, $matches, PREG_PATTERN_ORDER);
  2. soit tu utilises l'option de recherche U (U pour ungreedy, qui veut dire « non glouton »)
    preg_match_all ('#<b[^>]*>(.*)</b>#iU', $str, $matches, PREG_PATTERN_ORDER);

preg_match_all et parsing html

par damaskinos » 02 oct. 2009, 18:26

Bonjour a tous,

J'ai un petit problème avec les expressions régulières et preg_match_all. Je m'y prend peut-être mal alors je vais commencer par expliquer mon problème.

Disons que j'ai un code comme ceci.
<b>contenu 1</b><b>contenu 2</b><b>contenu 3</b>
ce que j'aimerais c'est avoir les contenus des tags dans un tableau.

J'ai donc essayé ça :
$matches = array();
preg_match_all('#<b[^>]*>(.*)</b>#i', $str, $matches,PREG_PATTERN_ORDER)

Quand je fais un var_dump de $matches, j'ai
array(2) { [0]=> array(1) { [0]=> string(48) "contenu 1contenu 2contenu 3" } [1]=> array(1) { [0]=> string(41) "contenu 1contenu 2contenu 3" } }
$matches[0][0] 
me donne
"contenu 1contenu 2contenu 3"
alors que j'aimerais plus avoir quelque chose du genre

$matches[0][0] = 'contenu 1';
$matches[0][1] = 'contenu 2';
$matches[0][2] = 'contenu 3';
J'espere que je suis assez claire. Le code html vient d'un fichier externe. Avec file_get_contents, je récupère le code et essaye d'appliquer ma regex. Si ce que je veux est pas possible avec preg_match_all, l'autre solution qui m'est venu a l'esprit est d'ouvrir le fichier avec fopen en lecture et de parcourir avec fgets le fichier ligne par ligne ensuite d'appliquer la regex sur la ligne. Si une correspondance est trouvée je le ''push'' moi même dans un tableau, le seul hic ici c'est que si la balise fermante est pas sur la même ligne, ma regex ne marche pas. JE sais pas si quelqu'un aurait déjà eu à faire un truc similaire ou tout juste quelqu'un aurait des conseils.


Merci d'avance