Page 1 sur 2
Repetition d'un mot
Posté : 03 avr. 2012, 09:53
par rimie
Bonjour,
Je voudrais chercher combien de fois un mot etait repete dans une variable:
$var = 'test qui va tester l'intelligence de rimie, passe mal, un autre test';
je voudrais savoir combien de fois le mot test etait repet, normalement c'est 2 fois, sans compter "tester"
merci
Re: Repetition d'un mot
Posté : 03 avr. 2012, 10:01
par moogli
substr_count devrait t'aider pas mal
@+
Re: Repetition d'un mot
Posté : 03 avr. 2012, 10:11
par rimie
merci moogli,
je voudrais l'integrer dans un code BBCode, l'idee c'est de compter le nombre d'occurence dans la chaine, par exemple [bold] et voir si [/bold] a le meme resultat, sinon, on saura que:
+ Si nombre [bold] > nombre [/bold], on n a pas ferme des tags [/bold]
+ et vice versa
Re: Repetition d'un mot
Posté : 03 avr. 2012, 11:07
par moogli
preg_replace_callback
je te conseil vivement de fouiller un peux dans la doc c'est pas compliqué
- problème de chaine => str*
- une recherche via expreg => preg_*
Après dans la liste à gauche tu fouille et regarde la description des fonctions, tu va apprendre plein de truc
@+
Re: Repetition d'un mot
Posté : 03 avr. 2012, 15:08
par rimie
ca marche pas
<?php
final class BBCode {
public final function __construct($text) {
$this->text = $text;
}
function bbcode()
{
$tags = array(
'/\[b\](.*?)\[\/b\]/isU' => '<b>\\1</b>',
'/\[i\](.*?)\[\/i\]/isU' => '<i>\\1</i>',
'/\[u\](.*?)\[\/u\]/isU' => '<u>\\1</u>',
); // closed array
foreach($tags as $k=>$v)
{
$this->newText = preg_replace($k, $v , $this->text);
}
return($this->newText);
} // end function
function parse()
{
$this->newText2 = preg_replace_callback(
'/\[.*\](.*?)\[\/.*\]/isU',
array(&$this, "bbcode"),
$this->newText);
return $this->newText2;
}
} // end class
$f = new BBCode('Ceci est un [b]test GRAS[/b], et ceci est un autre [b]test gras[/b]');
echo $f->bbcode();
echo '<br />';
echo $f->parse();
?>
Re: Repetition d'un mot
Posté : 03 avr. 2012, 15:32
par moogli
ca marche pas
ça c'est comme quand tu dit Gmalade au docteur => ça l'aide pas
il faut indiquer des symptômes, indiquer les tests etc etc
il faut que tu créer une méthode pour ce traitement précis !!!!
@+
Re: Repetition d'un mot
Posté : 03 avr. 2012, 16:30
par rimie
voila le resultat:
Ceci est un Ceci est un [-b]test GRAS[-/b], et ceci est un autre [-b]test gras[-/b]
j'ai mis (-) pour ne pas etre prise en consideration sur le forum
Re: Repetition d'un mot
Posté : 03 avr. 2012, 20:38
par sirakawa
De toute façon, cette forme d'analyse est mal conçue comme je vais le prouver:
c'est censé être
gras puis maigre puis gras puis normal
Code : Tout sélectionner
c'est censé être [b]gras puis maigre puis [b]gras[/b][/b] puis normal
Il faut se pencher sur les moteurs d'analyse syntaxique pour espérer une approche saine du problème.
Re: Repetition d'un mot
Posté : 04 avr. 2012, 02:16
par rimie
d ou vient le probleme dans mon code?
Re: Repetition d'un mot
Posté : 04 avr. 2012, 04:38
par rimie
voila un autre essai, seul le soulignement qui marche
<?php
final class BBCode {
public final function __construct($text) {
$this->text = $text;
}
function bbcode()
{
$tags = array(
'\[b\](.*?)\[\/b\]' => '<strong>$1</strong>',
'\[i\](.*?)\[\/i\]' => '<em>$1</em>',
'\[u\](.*?)\[\/u\]' => '<u>$1</u>',
); // closed array
$this->tags = $tags;
foreach($this->tags as $k=>$v)
{
$this->newText = preg_replace('/'.$k.'/', $v , $this->text);
//echo $this->newText.'<br />';
}
return($this->newText);
} // end function
} // end class
$f = new BBCode('Ceci est un [b]test GRAS[/b] et bien [u]souligne[/u], et ceci est un autre [b]test gras[/b] et voila [i]italic[/i]<br />');
echo $f->bbcode();
echo '<br />';
//echo $f->parse();
?>
Re: Repetition d'un mot
Posté : 04 avr. 2012, 07:19
par xTG
C'est normal.
foreach($array as $val)
$b = $val;
Quelle est la valeur de $b à la fin ? La dernière valeur de $array.
Re: Repetition d'un mot
Posté : 04 avr. 2012, 08:13
par rimie
c'est u:
'\[u\](.*?)\[\/u\]' => '<u>$1</u>',
Re: Repetition d'un mot
Posté : 04 avr. 2012, 16:37
par sirakawa
De toute façon, cette forme d'analyse est mal conçue comme je vais le prouver:
c'est censé être
gras puis maigre puis gras puis normal
Code : Tout sélectionner
c'est censé être [b]gras puis maigre puis [b]gras[/b][/b] puis normal
Il faut se pencher sur les moteurs d'analyse syntaxique pour espérer une approche saine du problème.
Il ne suffit pas de compter si on a le même nombre d'ouvrants et de fermants pour que le problème soit résolu:
((a +b) /c) : deux ( et deux )
n'a pas grand chose à voir avec
(a +(b /c)) : deux ( et deux )
ou a + (b/c) avec (a+b) /c
Re: Repetition d'un mot
Posté : 05 avr. 2012, 04:22
par rimie
oui c'est vrai, comment resoudre en primo le probleme qu'un seul parametre est pris en consideration
Re: Repetition d'un mot
Posté : 05 avr. 2012, 09:11
par sirakawa
sous unix, il y a bison (linux de yacc) et flex qui font ce type d'analyse, mais il faut écrire une grammaire sous forme d'expressions réguliéres
http://flex.sourceforge.net