OVH Cloud OVH Cloud

Strip_tags ... ou regex supplementaire ?

2 réponses
Avatar
Stefane
Bonjour

Cela fait un moment maintenant que je tourne en rond avec la fonction
strip_tags et les regex sont pas trop mon fort

Voici mon pb
A partir de ceci (resultat d'une regex)

$resultat_regex =
<tr style="background-color: #FFF">
<td><input type="checkbox" name="p" value="MZ-B" /></td>
<td>Bordeaux</td>
<td style="text-align: left">
<a href="/details_MZ-B.html">St Andre de C</a>
</td>
<td class="Prix">400,00 &euro;</td>
<td><img src="/images/bleu.png" width="16" height="18" alt="En cours
d'etude" /></td>
<td>Centre ville</td><td>Oui</td><td></td><td style="text-align:
left"></td>
</tr>

Comment obtenir le resultat de strip_tags($resultat_regex,"") dans un
tableau
$n[0] = Bordeaux
$n[1] = /details_MZ-B.htm
$n[2] = St Andre de C
$n[3] = 400,00 euro
$n[4] = /images/bleu.png
$n[5] = Centre ville
$n[6] = oui

Pour le moment je n'obtiens que
"BordeauxSt Andre de C400,00¤Centre villeOui"

Totalement inexploitable
:'(

J'ai pensé en vrac a :

- Abandonner mon projet ( :oÞ ]
- Utiliser une classe php pour parser $resultat_regex comme du html et
se balader de noeud en noeud ( :-? )
- Repasser $resultat_regex dans une deuxieme regex plus complete encore
que la premiere :o)
- Faire un script perso pour me balader entre les balises et les
attributs et extraire les valeurs du tableau
- Me mettre à la recherche d'un super trip_tags qui ne ferai pas que
supprimer les tags
- Et plein d'autres choses comme le XSLT mais je m'arrete ...

Je suis en panne seche !
;o) :'( ^^

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

2 réponses

Avatar
Olivier Miakinen

$resultat_regex > <tr style="background-color: #FFF">
<td><input type="checkbox" name="p" value="MZ-B" /></td>
<td>Bordeaux</td>
<td style="text-align: left">
<a href="/details_MZ-B.html">St Andre de C</a>
</td>
<td class="Prix">400,00 &euro;</td>
<td><img src="/images/bleu.png" width="16" height="18" alt="En cours
d'etude" /></td>
<td>Centre ville</td><td>Oui</td><td></td><td style="text-align:
left"></td>
</tr>

Comment obtenir le resultat de strip_tags($resultat_regex,"") dans un
tableau
$n[0] = Bordeaux
$n[1] = /details_MZ-B.htm
$n[2] = St Andre de C
$n[3] = 400,00 euro
$n[4] = /images/bleu.png
$n[5] = Centre ville
$n[6] = oui

Pour le moment je n'obtiens que
"BordeauxSt Andre de C400,00¤Centre villeOui"


Normal. Visiblement strip_tags() n'est pas ce dont tu as besoin.

J'ai pensé en vrac a :

- Repasser $resultat_regex dans une deuxieme regex plus complete encore
que la premiere :o)


Essayons.

$l1 = '<tr.*>s*';
$l2 = '<td.*</td>s*';
$l3 = '<td.*>(.*)</td>s*';
$l4 = '<td.*>s*';
$l5 = '<a href="(.*)">(.*)</a>s*';
$l6 = '<td.*>(.*)</td>s*';
$l7 = '<td.*src="(.*)".*</td>s*';
$l8 = '<td.*>(.*)</td>s*<td.*>(.*)</td>';

preg_match("|$l1$l2$l3$l4$l5$l6$l7$l8|U", $resultat_regex, $matches);

Ça ne marchera probablement pas du premier coup : à essayer petit
morceau par petit morceau, par exemple en commençant par $l1 et $l2
seulement, puis en ajoutant $l3, etc., et en corrigeant au besoin.

Avatar
Stefane
Merci Olivier de ton aide.
Mon problème est résolu depuis l'intervention de Thibaut sur un autre
forum php
Je fais suivre la solution de Thilbaut
Un grand merci a vous 2
Cordialement,
Stefane
:D :D :D :D :D :D :D :D
--------------------------------------
Salut,
Les regexps c'est vraiment indispensable pour faire du traitement de
texte, il ne faut donc pas abandonner courage.
J'ai mis ton texte de sorti d'apres la premiere regexp, et je t'ai
donné la regexp qui permet de matcher le tout pour récupérer les
données :
<?
$str = "<tr style="background-color: #FFF">
<td><input type="checkbox" name="p" value="MZ-B" /></td>
<td>Bordeaux</td>
<td style="text-align: left">
<a href="/details_MZ-B.html">St Andre de C</a>
</td>
<td class="Prix">400,00 &euro;</td>
<td><img src="/images/bleu.png" width="16" height="18"
alt="En cours d'etude" /></td>
<td>Centre ville</td><td>Oui</td><td></td><td style="text-align:
left"></td>
</tr>
";
print "<textarea cols="120" rows="30">";
print_r($str);
preg_match("/^<tr.*?<td><.*?</td>.*?<td>(.*?)</td>.*?<td.*?<a
href="(.*)">(.*)</a>.*?</td>.*?<td.*?>(.*?)</td>.*?<td><img
src="(.*?)".*
/></td>.*?<td>(.*?)</td><td>(.*?)</td>.*/ms",$str,$matches);

print_r($matches);
print "</textarea>";
?>

la variable $matches est un tableau qui contient exactement ce que tu
veux (à l'exception de $matches[0] qui sera égal à $str ou presque).
Il se peut que cette RE ne matche pas exactement tous tes blocs de
sorti, il faudra donc sans doute que tu l'adapte plus ou moins pour
bien tout récupérer.
A noter l'utilisation des .*? pour éviter qu'il ne prenne toute la
chaine à chaque fois mais qu'il s'arrete bien "au plus tot" dans la
chaine.
A noter aussi l'utilisation des flags /ms en fin de RE, qui sont une
condition sine qua none pour matcher parmi plusieurs lignes et
considérer les r et n comme des caractères normaux matchés par "."

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net