mot dans une chaine

mot dans une chaine - PHP - Programmation

Marsh Posté le 01-04-2005 à 00:49:06    

Bonsoir a vous,
 
Je voudrai compter le nombre de fois qu'un mot est utilisé dans une chaine et cela me donnera une valeur (ex= 23).
Je cherche cette fonction depuis toute la soirée, impossible de la decroché, ce serai apparement une expression réguliere  :??: ,  
 
Merci

Reply

Marsh Posté le 01-04-2005 à 00:49:06   

Reply

Marsh Posté le 01-04-2005 à 00:51:14    

http://be2.php.net/substr-count


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 01-04-2005 à 01:02:37    

merci impeccable ;)

Reply

Marsh Posté le 03-04-2005 à 12:03:19    

Rebonjours, voila jai un autre soucis avec ces satané chaines.
En fait je voudrai recupéré plussieurs valeurs dans un code source
 
voici deja une parti de la source
-----
<td><nobr>Framboisier&nbsp;</nobr></td>
<td><nobr>Cavalerie&nbsp;</nobr><td><nobr>Sergent Chef&nbsp;</nobr><td><nobr><a href="../perso/evt_perso.php?id_perso=960" target="_blank">960</a></nobr></td></td>
</tr>
<tr>
 
<td><nobr>Minet&nbsp;</nobr></td>
<td><nobr>Infanterie&nbsp;</nobr><td><nobr>Grouillot 1° classe&nbsp;</nobr><td><nobr><a href="../perso/evt_perso.php?id_perso=961" target="_blank">961</a></nobr></td></td>
</tr>
 
---------
en fait je voudrai recupéré la valeur "sergent chef" et le numéro 960 dans la premiere ligne de code
 
Apres je voudrai recupéré "Grouillot 1° classe" et le numéro 961
 
comme vous pouvez le constaté, mes récupérations de valeur sont linéaires dans le code,
donc moi je voudrai recupéré ces valeur de facon automatique sachant quil peu avoir 30 ligne de code comme cela.
 
Je suis un peu pommé a vrai dire, donc si vous pouviez maider 2 petite seconde sur cela, ce serai assez sympa.
Et si vous aviez un site d'expression reguliere en php en francais, ce serait de meme.  
 
MERCI

Reply

Marsh Posté le 04-04-2005 à 10:54:37    

J'ai eu le même problème, je devais parser un fichier HTML comme toi (c'étais sous VB.NET), et euh en faite...j'en ai trop chié, j'ai du utiliser les expressions réguliéres, et surtout beaucoup mais alors beaucoup de Bidouillages.  
Mais bon la ton code est plus simple, donc tu récupére ce que y'a entres les <tr>et</tr> puis dans ce que tu viens de récupérer, tu reprends ce qu'il ya entre les balises <nobr> et </nobr>.
Voila, j'espere que ca pourras t'aider.

Reply

Marsh Posté le 04-04-2005 à 11:23:34    

Bah si y'a des parsers en PHP, tu connais SimpleXML ou DOM?on dirait pas.Avant de demander si y'a des parsers en PHP regarde la doc de PHP,ca évite de poser des questions cons.
Comment ca mon site?ce que je devais parser tu veux dire?c'était l'agenda de Yahoo!.

Reply

Marsh Posté le 04-04-2005 à 11:33:07    

Ecoute, quelque soit la personne en face, je comprends pas pourquoi je dvrais m'exprimer comme j'en ai envie.
Si t'es quelqu'un de si 'haut' que tu le prétends, je pense que t'aurais fait un tour dans la DOC avant de venir poser une question ici,non?
Je suis d'accord pour le ton,je m'en excuse, mais ca me paraissait logique le coup de la Doc.

Reply

Marsh Posté le 04-04-2005 à 11:40:34    

Ah mais merde, excuse moi ese-aSH, je t'ai confondu avec le mec qui postait. J'ai juste la réponse, pas fais gaffe au nom.
Je suis vraiment désolé pour la confusion.
 
Lol le coup de la langue.
 
Oué c'est vrai que le coup des tableaux ca fou pas mal la merde.

Reply

Marsh Posté le 04-04-2005 à 13:39:46    

erf, je voulais pas qu'il y ai d'embrouille a cause des musclés :( .
J'ai fait un peu le tour de la doc php, et ce n'est vraiment pas evident de rechercher un truc que l'on ne connait pas.
 
Existe t'il une fonction qui permettrai de recupéré une chaine entre 2 balises comme <nobr></nobr>.
 
du genre $toto=array(chaine1,chaine2,....) qui recupére tout les chaines situé dans le code encardré par ces balises.


Message édité par Badze le 04-04-2005 à 13:40:23
Reply

Marsh Posté le 04-04-2005 à 14:01:33    

Badze a écrit :

J'ai fait un peu le tour de la doc php, et ce n'est vraiment pas evident de rechercher un truc que l'on ne connait pas.


je te conseille vivement de consulter la doc des regexp : http://fr.php.net/manual/fr/ref.pcre.php
pas évident au début mais ça vaut le coup.
 
sinon pour t'aiguiller voici un exemple simple :

Code :
  1. $test = '<td><nobr>Cavalerie&nbsp;</nobr><td><nobr>Sergent Chef&nbsp;</nobr><td><nobr><a href="../perso/evt_perso.php?id_perso=960" target="_blank">960</a></nobr></td></td>';
  2. if (preg_match('#<td><nobr>Cavalerie&nbsp;</nobr><td><nobr>(.*)&nbsp;</nobr><td><nobr><a href="\.\./perso/evt_perso.php\?id_perso=([0-9]*)" target="_blank">#i', $test, $match))
  3. {
  4. echo $match[1].', '.$match[2];
  5. }


Reply

Marsh Posté le 04-04-2005 à 14:01:33   

Reply

Marsh Posté le 04-04-2005 à 14:15:13    

Tout simplement exellent, une tres bonne piste, maintenant je n'ai plus qu'a faire de modification et tout ira pour le mieux.
 
Merci beaucoup ;)

Reply

Marsh Posté le 04-04-2005 à 14:37:59    

me revoila pour de nouvelles avantures, ne vous inquiété pas, ce n'est rien de sorcié.
 
Peut ton savoir le nombre de valeur qu'un array possede sans passé par un boucle ?
Je voudrai optimisé a fond, donc pourquoi s'emcombrer si l'on peut faire mieux.
 
Merci

Reply

Marsh Posté le 04-04-2005 à 15:00:58    

http://fr.php.net/count
 
telecharges la doc php au format chm, ca sera plus rapide que de demander ici  ;)

Reply

Marsh Posté le 04-04-2005 à 16:29:23    

Je veins de tester et c'est tout a fait bizarre, je n'est aucune sortie.
 
<?
$text=htmlspecialchars(file_get_contents("http://nord-versus-sud.com/classement/detail_compagnie.php?id_cie_info=65" ));
 
 if (preg_match('#<nobr>(.*)&nbsp;</nobr>#i', $text, $match)) // il y a une texte "<nobr>Sergent Chef&nbsp;</nobr>"
 {
         echo $match[1];
    }
?>
 
ce script sort le code source d'une page, et je voudrai sortir toute les chaines qui se situe entre <nobr></nobr>

Reply

Marsh Posté le 04-04-2005 à 17:10:32    

normal, tu as mis un htmlspecialchars, donc <nobr> se transforme en &lt;nobr&gt;

Reply

Marsh Posté le 04-04-2005 à 17:19:54    

Pourtant quand je affiche $text, je ne vois pas de modification du code source.
 
Si c'est le cas, que puis je mettre au lieu de htmlspecialchars sans qu'il y ai de changement de code.
 
edit: htmlentities me donne la meme chose, aucune sorti de valeur


Message édité par Badze le 04-04-2005 à 17:22:44
Reply

Marsh Posté le 04-04-2005 à 17:23:27    

Badze a écrit :

Pourtant quand je affiche $text, je ne vois pas de modification du code source.


si si ça modifie tout le source, regarde la doc : http://fr.php.net/htmlspecialchars
et puis pourquoi utiliser htmlspecialchars ??

Reply

Marsh Posté le 04-04-2005 à 17:24:56    

t'a combien de désultat retourné dans $match ???
 
paske si yen a qu'un dans ce cas là, et ben c'est plutot "$match[0]" que "$match[1]" qu'il faut afficher (le 1er index de ton tab c'est 0 et pas 1)...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 04-04-2005 à 17:25:50    

il devrai y avoir plusieur valeur,
malgré la valeur du $match

Reply

Marsh Posté le 04-04-2005 à 17:28:18    

Xav_ a écrit :

paske si yen a qu'un dans ce cas là, et ben c'est plutot "$match[0]" que "$match[1]" qu'il faut afficher (le 1er index de ton tab c'est 0 et pas 1)...


$match[0] va renvoyer le masque entier (avec les nobr) donc c'était bien $match[1]
 
par contre pour tout recupérer il faut utiliser preg_match_all
et je repete ma question : pourquoi utiliser htmlenities ou htmlspecialchars ??
 

Reply

Marsh Posté le 04-04-2005 à 17:38:03    

soju a écrit :


et je repete ma question : pourquoi utiliser htmlenities ou htmlspecialchars ??


 
Erf, je pensais tout simplement que voila  :??:  :??:  :??:  
Je ne sais pas de trop, sachant que je pouvais affiché $text, je ne voyai pas pourquoi cela modifirai mon code.
 
Tu a bel et bien raison, c'est inutile d'utilisé cette fonction;
 
en tout cas merci d'avoir passé du temps pour mon cas  :jap:  

Reply

Marsh Posté le 04-04-2005 à 17:53:22    

Bon cette fois ci c'est la fin des haricots, j'ai passé mon apres midi a faire ca,j'ai un mal de crane pas possible, mais rien a faire,
 
<?
$text=file_get_contents("http://nord-versus-sud.com/classement/detail_compagnie.php?id_cie_info=65" );
 
 if (preg_match('#<tr>
     <td><nobr>(.*)&nbsp;</nobr></td>
     <td><nobr>(.*)&nbsp;</nobr><td><nobr>(.*)&nbsp;</nobr><td><nobr><a href="\.\./perso/evt_perso.php\?id_perso=960" target="_blank">960</a></nobr></td></td>
     </tr>#i', $text, $match))
 {
         echo $match[1];
    }
?>  
 
Si on regarde le code source de la page que j'ai mis en lien ci dessus, on peu voir que la parti du code que j'ai mis se repete plusieur fois jusqu'en bas de la feuille.
 
Je n'arrive meme pas a sortir le premier resultat demander, et je voudrai que cela se face pour toute la page.
erf, je sens que ce projet va tomber a l'eau.
 
:'(

Reply

Marsh Posté le 04-04-2005 à 22:57:25    

Alors je viens de faire plein de test.
 
- il n'aime pas les espaces ou plutot les entrer, donc il ne veut pas du code que j'ai indiqué si dessus
 
- Si je prend une ligne de code seul, cela marche, mais il ne prendra que la premiere valeur sur laquel il va tomber.
 
Moi, je voudrai prendre toutes les valeurs de la page code qui se situe entre les memes balises.
 
Comme dans lexemple la
$text=  file_get_contents("http://nord-versus-sud.com/perso/cv_perso.php?id_perso=11053" );
 
if (preg_match('#<td class="texte_noir_bold_11">(.*)&nbsp;</td>#', $text, $match))
 {
 echo $match[1];
 }
 
Essayer par vous meme, vous verrez bien :)


Message édité par Badze le 04-04-2005 à 22:57:54
Reply

Marsh Posté le 05-04-2005 à 09:36:50    

Badze a écrit :

- il n'aime pas les espaces ou plutot les entrer, donc il ne veut pas du code que j'ai indiqué si dessus

normal il y a des espaces en trop, regarde bien le source de la page que tu veux parser
 

Badze a écrit :

Moi, je voudrai prendre toutes les valeurs de la page code qui se situe entre les memes balises.

http://fr.php.net/preg_match_all  

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed