Enlever les mots de moins de 3 lettres dans une phrase

WRInaute occasionnel
bonsoir !

je n'arrive pas à trouver comment faire avec les expressions régulières pour supprimer dans une phrase tous les mots de moins de 3 lettres.

si quelqu'un pouvait m'aider, merci d'avance :D
 
WRInaute passionné
je te file en vrac ce que j'utilise pour traiter mes url
Code:
// fonctions
function sup_a($s) 
	{ 
	$avec_acc = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ' ; 
	$sans_acc = 'AAAAAAACEEEEIIIIDNOOOOOOUUUUYaaaaaaaceeeeiiiionoooooouuuuyy' ; 
	return strtr($s, $avec_acc, $sans_acc) ; 
	} 

function ecr_ur($s) 
	{ 
	$s=stripslashes(sup_a(html_entity_decode($s)));
	$s=eregi_replace("[^0-9a-z]+"," ",$s);
	$s=strtolower(eregi_replace("[\ ]+","-",trim($s)));
	$s=eregi_replace("-(.{1,2}-)+|^(.{1,2}-)+|(-.{1,2})+$","-",$s);
	return eregi_replace("^-|-$","",$s);
	} 

function ur($s) 
	{
	return urlencode(ecr_ur($s));
	}

la première fonction fait pêter les accente
le deuxième transforme le texte enremplacant tout les mots < 3 et les espaces par des -
la troisième encore.

apres il ne te reste qu'a faire ur($txt) pour placer dans une url.

(y'a peut être mieux, mais c'est ce que j'utilise)
 
WRInaute passionné
Salut,

Je pense que le masque tient juste à quelque chose comme ça :

'[0-9a-zA-Z]{1,3}' que tu remplaces par un ''
 
WRInaute passionné
Ou sinon une méthode classique qui fonctionne...


Code:
<?php
$var='cooool poe ahhhhhhhh pu';
$tab=explode(' ', $var);

$i=0; $str=NULL;
while(isset($tab[$i])) {
	if(strlen($tab[$i])>3) 
		$str.=$tab[$i];
	$str.=' ';
	$i++;
}
echo trim($str); //Affiche cooool ahhhhhhhh
?>
 
WRInaute occasionnel
merci pour vos réponses. je voudrais éviter d'utiliser la méthode classique, car le traitement est trop long.

j'ai fais la fonction de traitement d'url, le seul problème est la longueur, et je voudrais retirer les mots de 3 lettres et moins.

jeroen > est-ce bien cette ligne de ta fonction qui retire les mots de 2 lettres et moins?
eregi_replace("-(.{1,2}-)+|^(.{1,2}-)+|(-.{1,2})+$","-",$s);
car je n'arrive pas à la faire marcher :( (à quoi correspond le $ en gras stp?)

dorian > [0-9a-zA-Z]{1,3} ne marche pas car il me supprime aussi les occurences où il y a 3 lettres de suite, donc presque tous les mots.

merci de votre aide
 
WRInaute passionné
Dans cette ligne
Code:
eregi_replace("-(.{1,2}-)+|^(.{1,2}-)+|(-.{1,2})+$","-",$s);
je part d'une chaine du type le-petit-chat-gris-a-faim (mon dieu quel imagination) pour obtenir petit-chat-gris-faim

-(.{1,2}-)+ > si l'intérieur de la chaine contient un mot de moins de 2 lettres entre 2 - (correspond à -a- que je remplace par -)
| > ou
^(.{1,2}-)+ > si le début de la chaine contient un mot de moins de 2 lettres (correspond à le- que je remplace par -
| > ou
(-.{1,2})+$ > si la fin de la chaine contient un mot de moins de 2 lettres (ne correspond pas dans mon exemple
 
WRInaute occasionnel
au cas où la réponse de jeroen ne soit pas assez concise :
- le ^ signifie début de chaine
- le $ signifie fin de chaine
 
WRInaute occasionnel
a retirer les mots trop courts de l'url.

par exemple mon url :
la-longueur-de-cette-url-est-vraiment-trop-important.html

devient si j'enleve les mots de moins de 4 lettres :
longueur-cette-vraiment-trop-important.html

ca facilite l'indexation des pages
 
WRInaute impliqué
Perso, j'utilise une petite fonction qui extrait les mots cles d'un texte avec une exclustion des mots non significatifs pour contituer un index de recherche.

J'utilise aussi cette fonction pour les url, ce qui donnerait sur cette url longueur-vraiment-important.html ou longueur-important.html

C'est tres simple a realiser il faut definir:
- la taille minimale des mots
- la liste des mots a garder (malgres la taille)
- la liste des mots a exclure
Avec cela, tu auras le minimum utile dans tes url.
 
WRInaute impliqué
dorian53 a dit:
Code:
<?php
$var='cooool poe ahhhhhhhh pu';
$tab=explode(' ', $var);

$i=0; $str=NULL;
while(isset($tab[$i])) {
	if(strlen($tab[$i])>3) 
		$str.=$tab[$i];
	$str.=' ';
	$i++;
}
echo trim($str); //Affiche cooool ahhhhhhhh
?>
Serait mieux avec une boucle for:
Code:
function sup_3($var){

$tab=explode(' ', $var);

for($i=0 AND $var=NULL; isset($tab[$i]); $i++) {
	if(strlen($tab[$i])>3) {   $var.=$tab[$i].'-';   }
}
$var.='.';
$var=str_replace('-.','',$var);
return($var);
}
echo $var; //Affiche cooool-ahhhhhhhh
 
WRInaute passionné
Salut,

Je doute fortement que tu arrives à boucler avec un return sans condition dans le for.

Ou sinon il manque une }

Je ne comprends pas non plus le rôle du str_replace qui vient supprimer ton tiret...
 
WRInaute impliqué
Oui il manque un } et le dernier tiret est enlevé, car cela évite de faire motclé-motclé- mais motclé-motclé

;-)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut