|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : octobre 2006 Messages : 33 ![]() |
Salut,
J'aimerais compter le nombre d'occurences d'un mot dans une chaine en PHP. Comment y procéder, si possible sans regex ? Merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Développeur Web Inscription : mai 2007 Messages : 282 ![]() |
Tu peux utiliser la fonction substr_count(taChaine , tonMot)
Pour plus d'infos substr_count |
|
|
00
|
|
|
#3 | |
|
Invité régulier
![]() Inscription : octobre 2006 Messages : 33 ![]() |
Citation:
|
|
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Alex Étudiant Inscription : avril 2008 Messages : 13 ![]() |
la fonction substr_count(taChaine , tonMot) recherche une suite de caractères, et non pas un "mot" dans le sens suite de caractères separés par des espaces ...
Quelqu'un a t il une idée sur comment exclure d'une requete substr_count('le possible' , 'le') le "le" contenu dans "possible" ... Cette requete renvoie "2" ... alors que je cherche à ce qu'elle ne renvoie que "1" ... Merci ! |
|
|
00
|
|
|
#5 | ||
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Code :
|
||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Alex Étudiant Inscription : avril 2008 Messages : 13 ![]() |
Génial, ca marche !
Merci Julp ... Pour ne pas rester ignare, peut tu m expliquer ce que signifie la balise " ~\b" et "\b~i" ? Indique t elle au serveur d'exclure les occurences au contact d'autre caractères ? ou indique-t-elle uniquement de considérer seulement les occurences au contact d' espaces ? Comment formulerais tu une requete pour ne compter que les occurences ou le " le " est en fin de mot ? en debut ? au milleu ? Merci de ta contribution super rapide sur ce vieux topic |
|
|
00
|
|
|
#7 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
~ : c'est le caractère délimiteur, il marque le début et la fin du motif
\b : c'est bien 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 Ça ne fonctionnera pas avec les bases de données : le but n'est pas le même et elles n'utilisent pas le même moteur que PHP (PCRE). |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Alex Étudiant Inscription : avril 2008 Messages : 13 ![]() |
Merci de ces quelques précisions qui me permettent de comprendre ce que j'insère dans mon code !
Je ne vois pas le probleme pour une compatibilité mysql ... Du moment que ma chaine de caractère a été converti en variable php, je peux tout à fait la traiter ! Merci ! |
|
|
00
|
|
|
#9 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Ah, ok.
En fin de mot : \Ble\b En début de mot : \ble\B En plein dans un mot : \Ble\B |
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Alex Étudiant Inscription : avril 2008 Messages : 13 ![]() |
Merci !
En l'état d'avancement des choses, je recherche à compter le nbre d'occurence d'un mot dans un txt ( ça c bon on a réussi) puis à remplacer chaque occurence par un autre motif: j'ai essayé de réutiliser la syntaxe de "description de motif " que tu m'a trouvé au sein d'un str_replace comme suit: $string = il fut très futé echo str_replac(" ~\bfut\b~i", "est", $string); j'aimerais qu'il me renvoie "il est très futé" et surtout pas qu'il renvoie "il est très esté" ^^ pour l'instant ça ne fonctionne pas, aucun message d'erreur, mais la chaine traitée par le str_replac est la même que la chaine donnée ... j'en conclu donc que la fonction ne repère pas le motif, et donc que str_replac ne comprend pas les ~\b ... T'as une idée ? |
|
|
00
|
|
|
#11 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Il n'y a que les fonctions preg_* qui prennent en charge les expressions régulières (pcre). Donc c'est plutôt vers preg_replace que vous devez vous tourner pour cela.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com