Eléphant du PHP |
171 Messages
15 mai 2011, 11:40
mais je ne comprend pas pourquoi le retour à la ligne n'est pas considéré comme un "n'importe quel caractère"
Cette exception existe pour des raisons historiques. Les premiers programmes qui utiliser les expressions régulières fonctionnaient ligne par ligne. Les fichiers étaient lus ligne par ligne, et les programmes appliquaient l’expression régulière séparément pour chaque ligne. Résultat : La chaîne ne contenait donc jamais de retour à la ligne, et le point ne pouvait donc pas les prendre.
mais doit y avoir une explication et un moyen plus propre de le faire :
Et bien, recherchant aussi à prendre tout entre deux balises, je m'y suis penché il y a quelques jours, et je vous avoue que .... ÇA M'A BIEN PRIS LA TÊTE !! ^^ Mais j'ai tout de même la solution.
Ton code devient tout simplement celui ci :
Code : Tout sélectionner
$url="http://www.gerardmer.net/bibliotheque-mediatheque_francais.php";
$code_page = file_get_contents($url);
preg_match('/<div class="nom_adherent">([\S\s]*?)</div>/i', $code_page, $sortie);
print_r($sortie);
De plus, j'ai lu sur un forum que en terme de rapidité le
\S\s >
\s\S >
(.|\n)*. La personne a fait des tests de performances et a trouvé ça.
Voilà, normalement ça devrait fonctionner. Moi je m'en servais pour remplacer le contenu mais pour extraire ou remplacer mais la regex ne change pas.
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.