extraire donné entre un div ? [RegEx] - PHP - Programmation
Marsh Posté le 08-05-2008 à 01:53:51
yop,
j'suis pas trop doué pour ces troucs mais ça devrait marcher (enfin si j'ai bien compris ce que tu voulais faire) :
Code :
|
le "?" dit que le caractère le précédent peut être présent ou non.
Dans le pattern, les " sont échappés par un \ => \" (Il faut les échapper parce que ta chaine est entourée de " aussi)
<div class="Pad1Color2"> est le début du pattern (où il faut échapper les caractères spéciaux s'il y en a).
</div> est la fin du pattern.
Ce qu'on veut capturer, on le met entre ()
On veut avoir tout ce qui se trouve entre les deux balises. On commence après la première balise. On doit s'arrêter avant la deuxième balise (</div> )
Donc on va dire qu'on va prendre tous les caractères différents de "<" (qui indiquerait le début de </div> ).
Bon, ce serait mieux de dire de s'arrêter dès qu'il trouve "</div>" mais je ne sais pas comment faire
Bref, ici on veut n'importe quoi sauf "<" ce qui s'écrit [^<]*
les caractères entre [] sont autorisés sauf si précédés d'un ^
* dit que les caractères permis peuvent apparaitre un nombre quelconque de fois.
voilou, mais y a surement mieux
Marsh Posté le 08-05-2008 à 09:21:58
/<div class="Pad1Color2">(.*?)</div>/
Marsh Posté le 08-05-2008 à 10:16:07
On ne parse pas du HTML avec des regexp
http://simplehtmldom.sourceforge.net/
Marsh Posté le 08-05-2008 à 10:58:05
D'autant que ma regexp va chier avec des div imbriqués.
Faudrait de la récursion, mais bon ouais, autant le faire avec DOM de toute façon. Surtout avec cette bibli, que je connaissais pas tiens, ça a l'air particulièrement pratique/concis tout ça, pas comme le truc de base.
Marsh Posté le 08-05-2008 à 11:04:06
sielfried a écrit : D'autant que ma regexp va chier avec des div imbriqués. |
Ben oui, comme quasiment toutes les regexp, et quand des fonctionalités récursives sont ajoutées aux regexp (e.g. Perl), ça devient imbitable et au final on gagne pas grand chose sur un parseur propre, à part le fait que personne ne puisse maintenir le truc
C'est comme le BBCode, vous remarquerez que dans 99.9% des forums il est trivialement possible de flinguer le BBCode et de sortir des trucs tout pêtés, parce que le bbcode est parsé/transformé à coup de regexp au lieu de faire ça proprement
Marsh Posté le 08-05-2008 à 01:08:26
Bonjour,
Dans une variable est stocké une page html avec ses balises sans les retours chariots.
Je n'aurais besoin que des données entre la balise <div class="Pad1Color2"> et <div>
Je pensais utilisé le pattern suivant :
La fonction retourne true => echo "trouvé";
mais par contre le tableau marches me retourne :
Array
(
[0] => >
[1] =>
[2] =>
[3] => >
[4] =>
)
Bref, je pense qu'en fin de compte mon pattern n'est pas bon.. Dans le pattern, j'ai mis des ? parce que les doubles quotes " ne passe pas.