Nombre d'occurence d'un mot dans une chaine

Fermé
hadjir Messages postés 107 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 7 janvier 2010 - 18 avril 2009 à 23:25
 aaa - 16 sept. 2010 à 11:11
Bonjour,
j'ai une question :
j'ai une chaine de caractére composé de plusieurs mots par des virgules.
je cherche comment calculer le nombre d'occurence de cette mot dans la chaine en php.
merci de me répondre je cherche une réponse le plutot possible si c'est possible.
merci d'avance

1 réponse

salut,
tardivement certes mais bon ça pourrait peut être encore servir :
<?php 
function retour_nb($chaine, $occurence)
{
	preg_match_all('`'.$occurence.'`', $chaine, $table, PREG_SET_ORDER);
	return count($table);
}

$chaine='le camion ecrase le zoizo, la conductrice lâche la pédale'; // La chaine sujette
echo retour_nb($chaine, 'l[e|a]'); // Appel de la fonction avec ta chaine et le mot à rechercher
?>

Voilà ici ça compte combien d'occurences de "le" ou "la" se trouvent dans ta chaine.
0
Salut CesarX,
je fais actuellement des recherches sur les possibilitées de traitement de textes en php, et ta fonction ma fait découvrir des fonctionalitées PHP que je ne conaissais pas ( mise entre crochets pour recherche soit "le", soit "la" )

Merci de ta contribution !

Seule remarque, ta fonction retourne le nombre d occurence d'une suite de caractère l>e ou l>a mais sans respecter la casse ...

A tu une idée comment intégrer la distinction entre "le" et "possible" ?.

Merci, Bonne journée !

Alex, depuis Strasbourg.
0
billbao1987 > billbao1987
21 déc. 2009 à 11:00
on m' a trouvé la réponse sur un autre forum :)

pour la requete suivante:

$nbOccurrences = preg_match_all('le', $string);

il faut utiliser les délimiteurs de motifs :

~ : c'est le caractère délimiteur, il marque le début et la fin du motif
\b : c'est le délimiteur de mot donc ça signifie qu'on cherche à ce qu'il n'y ait pas de "lettre" avant ou après (suivant sa position)
i (option) : insensible à la casse


ce qui donne donc :

$nbOccurrences = preg_match_all('~\ble\b~i', $string, $matches);

ainsi, les "possible", "electrictrité" ou encore "lecture" seront ignorés ....
détails:


En fin de mot : \Ble\b
En début de mot : \ble\B
En plein dans un mot : \Ble\B
0
substr_count
0