expressions régulières et balises HTML - PHP - Programmation
Marsh Posté le 01-07-2003 à 23:41:55
les balises autour sont fixe ou non ?
si oui, look : http://forum.hardware.fr/forum2.ph [...] 30#t445738
Marsh Posté le 02-07-2003 à 09:01:33
les balises sont toujours pareilles pour un type de texte, par exemple le type titre sera tjrs entouré par les mêmes balises, le type contenu tjrs par les mêmes balises (mais différentes de titre).
Marsh Posté le 02-07-2003 à 10:25:15
voilà le code que j'ai fait :
$session = fopen ("source.tmp", "r" );
$contenu = fread ($session, filesize ("source.tmp" ));
$text = preg_replace("/<span class=\"txtbld\">(.+?)</span>/si","$1",$contenu);
echo"$text";
et ça met comme erreur :
Warning: Unknown modifier 'p'
à la ligne : $text = preg_replace("/<span class=\"txtbld\">(.+?)</span>/si","$1",$contenu);
aidez moi !! ça m'enerve !!
Marsh Posté le 02-07-2003 à 10:36:19
grohark a écrit : voilà le code que j'ai fait : |
preg_replace("/<span class=\"txtbld\">(.+?)<\/span>/si","$1",$contenu);
j'enléverais le point d'interrogation aussi pour ne laisser que le plus ( + => 1 occurence ou plus; ? => 0 ou 1 occurrence)
Marsh Posté le 02-07-2003 à 10:55:57
merci ca va bcp mieux en mettant l'antislash.
mais maintenant j'ai un autre problème, quand j'affiche $text, bin en fait ça affiche tout le source comme si l'expression réguière n'avais rien fait.
une idée ?? un soupçon ? ou est le coupable ?
Marsh Posté le 02-07-2003 à 11:03:01
grohark a écrit : |
il sert à koi ce "s"
Marsh Posté le 02-07-2003 à 11:10:41
bonne question ?!
en fait je suis aller voir le lien de THEniluje, ne connaissant rien aux expressions régulières, j'ai fait betement un copier/coller.
si c'est un option de recherche, j'ai un bouquin qui me dit : le metacaractere point(.) remplace n'importe quel caractère, y compris les nouvelles lignes.
Marsh Posté le 02-07-2003 à 11:11:35
le s à la fin de la regex sert à preciser que le motif peut être sur plusieurs lignes.
Attention le ? dans (.+?) ne veut pas du tout dire 0 ou 1 à cet endroit la, il sert à restreindre la recherche au plus petit motif trouvable.
Par exemple si j'ai le texte
Code :
|
Sans le ? ça va me retourner:
Code :
|
quand a ton probleme grohark vérifie bien que ton motif décrit exactement ce que tu peux trouver dans ton texte. Par exemple que tu n'as pas des espaces après les class="txtbld" ou dans les balises de fermetures des spans.
Si c'est pas ça montre un bout du text que tu voudrais récuperer.
Marsh Posté le 02-07-2003 à 11:29:33
je pense que mon motif décrit exactement ce que tu peux trouver dans ton texte.
ce qu'il y a dans mon texte à cette tête là :
<span class="txtbld">Au Jardin d'Aladin </span>
et donc ça revient plusieurs fois avec un texte différent entre les balises.
Marsh Posté le 02-07-2003 à 11:44:20
bin en même temps essaye juste ce bout de script:
Code :
|
Tu verras qu'il marche donc que ta regex est correcte.
Marsh Posté le 02-07-2003 à 15:33:40
en fait je doute.
si je modifie $contenu de la façon suivante, il m'affiche le au jardin d'aladin en rouge et il m'affiche toto.
<?php
$contenu = '<font color=red><span class="txtbld">Au Jardin d\'Aladin </span></font><span class="txtbld">Arizona (SARL)</span><span class="txtbld">Au Jardin d\'Aladin </span><span class="txtbld">Au Jardin d\'Aladin </span><font size="2">toto</font>';
$text = preg_replace("/<span class=\"txtbld\">(.+?)<\/span>/si", "$1" ,$contenu);
echo $text;
?>
Marsh Posté le 02-07-2003 à 15:41:43
en executant exactement ce que tu as ecrit j'obtiens :
Code :
|
Ce qui est exactement ce que tu es censé obtenir avec le replace et la regex.
Maintenant je pense comprendre que ça ne fait pas du tout ce que tu veux. En fait comme tu le disais au premier message, toi tu veux recuperer ce qu'il y a dans les balises:<span class="txtbld">...</span> correct?
Au quel cas c'est pas du tout preg_replace qu'il faut utiliser mais preg_match_all avec la même regex. Attention preg_match_all retourne un tableau de tableau.
Marsh Posté le 02-07-2003 à 16:02:20
ça fonctionne !! je te remercie de ta patience Anapajari !
donc au final, la code est :
Code :
|
Marsh Posté le 02-07-2003 à 17:13:55
finalement ce n'est pas fini
si il y a des saut de lignes entre les balises, ça ne marche plus...
rien ne vaut un exemple pour ce faire comprendre :
Code :
|
donc voilà je veux l'adresse mais elle sur plusieurs dans le source.
embêtant
Marsh Posté le 03-07-2003 à 11:39:13
un dernier petit effort s'il vous plait...
on est presque au bout de ce problème.
Marsh Posté le 03-07-2003 à 12:12:02
utilise la regex suivante:
Code :
|
[edit] enlevage de conneries [/edit]
Marsh Posté le 03-07-2003 à 14:11:52
est-ce normal que le tableau de résultats contienne les balises html qui me servent de repères ?
c-à-d <span class="txtbld">Au jardin d'Aladin</span>
je pensais que ça allait contenir que ce qu'il y a entre les balises ?!
Marsh Posté le 03-07-2003 à 14:42:22
et dis tu voudrais pas lire la doc des fois avant de poser tes questions....
Citation : http://fr.php.net/manual/fr/functi [...] ch-all.php a dit: |
Marsh Posté le 03-07-2003 à 15:17:16
oups désolé j'aurais pu lire surtout que j'ai le bouquin sous les yeux. (honte à moi...)
cela dit, petite rectification :
Citation : $matches[0][0] contient le texte qui satisfait le masque complet, $matches[0][1] contient le texte de la première parenthèse capturante |
mais plutot
Citation : $matches[0] est un tableau qui contient les résultats qui satisferontle masque complet, $matches[1] est un tableau qui contient les résultats qui satisferont la première parenthèse capturante |
Marsh Posté le 03-07-2003 à 15:32:53
j'ai encore une question (eh oui... c'est pas loin d'être la dernière)
si il y a un saut de ligne entre les balises repères, ça se passe comment ?
Marsh Posté le 03-07-2003 à 15:41:30
Raaah t'abuses quand même
Anapajari a déjà écrit un peu plus haut : le s à la fin de la regex sert à preciser que le motif peut être sur plusieurs lignes. |
en plus c'est aussi marqué la:
http://fr.php.net/manual/fr/pcre.pattern.modifiers.php et ça doit être la page d'avant dans ton livre.
Marsh Posté le 03-07-2003 à 15:51:18
ba voui je sais bien mais pourquoi quand je fais ça :
Code :
|
bin il me sort rien du tout !!!! alors qu'il y a bien qqchose !!
soit je suis pourri bulbe soit c'est qqchose de très con !!
petite précision, il y a un saut de ligne entre <font color=\"#000000\"> et <b>
Marsh Posté le 03-07-2003 à 16:13:42
Bin evidemment ça peut pas marcher ton truc quand tu ecris:
Code :
|
Le s a la fin sert à dire si il y a des retour à la ligne au milieu du (.+?) c'est pas grave considérer les comme des caractères normaux.
le m c'estinutile ( et c'était une connerie que j'avais ecrit plus haut) vire le, tu as juste besoin de "si" dans ton cas.
Bref pourquoi ça peut pas marcher. Si tu as le texte suivant
Code :
|
Dans $contenu tu auras:
Code :
|
donc forcément ta regex va pas marcher...
Mais je pense que tu t'emmerdes pour rien. Tu cherches à recuperer des numeros de téléphones non? ils sont tous ecrit pareils non? moi je travaillerais plutot la dessus...
Et si t'as pas envie vires tous les \n de $contenu.
Marsh Posté le 03-07-2003 à 16:53:12
je ne peux pas virer les \n dans le code.
effectivement je veux récupérer des numéro de téléphone, qui sont tous identiques. je vais me pencher sur la question.
Marsh Posté le 07-07-2003 à 13:47:28
une fois de plus je dois avouer mon incompétence en matière d'expressions régulières.
j'ai potassé un peu les docs sur le sujet, mais ça reste quand même obscure pour moi.
Donc si qq1 à encore pitié j'aimerai avoir une regexp qui me permet d'extraire les numéros de téléphone de la forme xx xx xx xx xx
encore une fois merci.
Marsh Posté le 07-07-2003 à 14:27:06
bon solution bourrin mais qui marche :
Code :
|
Les points c'est pour n'importe quel caractère, donc si ton telephone est comme ça: 00/11/22/33/44 ça marche quand même. Euh par contre si tu as un nombre type 44433322211100 ça le ramenera aussi donc fait gaffe.
Solution un peu plus fine:
Code :
|
Mais la c'est de têtet et je suis pas 100% sur.
Marsh Posté le 07-07-2003 à 15:06:27
la première méthode me va plutot bien, la 2e récupère en tas de choses (des % entre autres).
par contre pour la 1ère, j'ai 5 fois à la suite le même résultat alors qu'il n'y est qu'une fois ?
Marsh Posté le 07-07-2003 à 15:14:21
Si t'es sur d'avoir tous les telephones, fait un array_unique sur ton tableau de resultat.
Si jamais il t'en manque et qu'en plus certains reviennent plusieurs fois c'est que j'ai du me trompé sur la regex.
Marsh Posté le 07-07-2003 à 16:39:47
c'est cool ça fonctionne !
petite remarque sur la fonction array_unique que je trouve un peu bizarre :
ça dédoublonne parfaitement mais ça laisse les cases du tableau vides, je trouve que ce n'est pas pratique si ensuite on veut faire faire un count()...
enfin bref le principal est fait, merci bien !
Marsh Posté le 01-07-2003 à 16:23:54
slt,
n'ayant aucunes connaissances en expressions régulères, j'ai besoin de vous !!!
je souhaiterai extraire d'un fichier HTML, certaines données contenues entre certaines balises.
par exemple <b>toto hoho</b> je souhaiterai extraire "totot hoho".
et un peu plus compliqué si il y a plusieurs balises que se suivent : <font color=black><b>toto hoho</b></font>.
merci d'avance