Enlever les mots de moins de 3 lettres dans une phrase

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
 
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)
 
Salut,

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

'[0-9a-zA-Z]{1,3}' que tu remplaces par un ''
 
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
?>
 
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
 
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
 
au cas où la réponse de jeroen ne soit pas assez concise :
- le ^ signifie début de chaine
- le $ signifie fin de chaine
 
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
 
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.
 
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
 
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...
 
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