[PHP] Supprimer les mots de moins de x caractères

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Dim Juin 27, 2004 10:33

Merci pour les conseils, je vais regarder ça ! :)


Dr DLP
WRInaute passionné
WRInaute passionné
 
Messages: 579
Inscription: Sam Juin 28, 2003 23:42

Message le Dim Juin 27, 2004 11:27

Je préfère preg_replace :)
Code: Tout sélectionner
$var = preg_replace('/[ ]([\S]{1,2})[ ]/',' ', $var);


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Mar Juin 29, 2004 17:01

Comme l'avait dit Georges, ce code pose problème si cela concerne le premier mot : il n'est pas remplacé. Je suppose qu'il faudrait rajouter quelque chose dans le regex pour le premier mot (avec ^) mais je dois dire que je n'y arrive pas...
Je continue à chercher, mais si qqun peut éclairer ma lanterne, qu'il n'hésite pas :wink:


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Mar Juin 29, 2004 17:17

Bon! J'ai réussi à le faire en utilisant deux regex de suite.

Code: Tout sélectionner
Suppression des mots de moins de 4 lettres :
$chaine = ereg_replace('^.{1,3} ', ' ', $chaine);
$chaine = ereg_replace(' .{1,3} ', ' ', $chaine);


Par contre, cela crée un espace en début de chaine, donc il faut utiliser trim() ensuite pour le supprimer.

Si quelqu'un parvient à faire ça en un seul regex (et sans trim)...chapeau :)


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Mar Juin 29, 2004 17:31

En fait cela ne fonctionne pas ! :twisted: Si plusieurs mots de moins de 4 lettres se suivent ça n'efface que le premier ! Help :(


George Abitbol
WRInaute accro
WRInaute accro
 
Messages: 1923
Inscription: Ven Juin 06, 2003 7:57

Message le Mar Juin 29, 2004 17:40

Code: Tout sélectionner
preg_replace('/\b[^ ]{1,3}\b/', '', $chaine);


Mais ce n'est pas parfait, ça oblige à faire le trim quand même.

Fred


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Mar Juin 29, 2004 17:52

C'est déjà super, merci à toi ! :)


Dr DLP
WRInaute passionné
WRInaute passionné
 
Messages: 579
Inscription: Sam Juin 28, 2003 23:42

Message le Mar Juin 29, 2004 19:19

Ok , voici le code PHP qu'utilise phpBB légèrement allégé ( au moins c'est sûr que ça marche ! ) :
Code: Tout sélectionner
$drop_char_match =   array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!');
$drop_char_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '',  '',   ' ', ' ', ' ', ' ', '',  ' ', ' ', '',  ' ',  ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' , ' ', ' ', ' ', ' ',  ' ', ' ');
$entry = ' ' . strip_tags(strtolower($entry)) . ' ';
$entry = preg_replace('/[\n\r]/is', ' ', $entry);
$entry = preg_replace('/\b&[a-z]+;\b/', ' ', $entry);
$entry = preg_replace('/\b[a-z0-9]+:\/\/[a-z0-9\.\-]+(\/[a-z0-9\?\.%_\-\+=&\/]+)?/', ' ', $entry);
for($i = 0; $i < count($drop_char_match); $i++)
{
   $entry =  str_replace($drop_char_match[$i], $drop_char_replace[$i], $entry);
}
$entry = str_replace('*', ' ', $entry);
$entry = preg_replace('/[ ]([\S]{1,2}|[\S]{3})[ ]/',' ', $entry);

où $entry est ta chaine de caractères .


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Mar Juin 29, 2004 19:36

Wow 8O Ils font pas dans la dentelle, c'est quand même un peu brutos !
Dans mon cas, les chaînes sont assez spécifiques et je pense que la soluce de George marche parfaitement (je verrai par la suite si je détecte des anomalies).
Cela dit, dans un cas plus complexe/général, ce code est sans doute plus sûr, je le note okazou :wink: Merci !


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Jeu Juil 01, 2004 10:56

À propos du code de George :

Code: Tout sélectionner
preg_replace('/\b[^ ]{1,3}\b/', '', $chaine);

Il marche parfaitement, le seul truc c'est qu'il est possible que j'aie à faire à des caractères autres que des lettres. Et là, dans ce cas, si par exemple j'ai la chaine "blabla - blablabla", il va me laisser le tirêt du milieu.

Y-a-t-il une petite astuce pour que ce code s'applique à tous les types de caractères ? C'est affreux, j'ai vraiment du mal avec ces regex, surtout quand c'est des preg_replace() !

Merci beaucoup


TrashBox
WRInaute discret
WRInaute discret
 
Messages: 67
Inscription: Ven Juin 18, 2004 11:09

Message le Jeu Juil 01, 2004 14:10

Code: Tout sélectionner
$var2 = preg_replace(array('/\-/','/\b[\S]{1,4}\b/'), '', $var);

ça devrait marcher pour les - comme ça !


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Jeu Juil 01, 2004 17:02

Bienvenue et merci de consacrer ton 1er post pour m'aider :)
Par contre, le tiret était un exemple parmi d'autres, en fait je risque d'avoir affaire à beaucoup de caractères...donc si qqun a une solution qui fonctionne dans un cadre plus général, je vous remercie d'avance !


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Ven Juil 02, 2004 13:03

Je n'ai toujours pas trouvé la soluce... :?


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Sam Juil 03, 2004 16:19

Help :(

[PHP] Supprimer les mots de moins de x caractères

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités