[PHP] Ajouter une exception dans une regex
5 messages
• Page 1 sur 1
-

GarGamel55 - Nouveau WRInaute

- Messages: 34
- Inscription: 28 Sep 2006
[PHP] Ajouter une exception dans une regex
Bonjour,
Je chercher à améliorer un script que j'utilise sur un de mes sites.
Ce script à pour but d'extraire via un explode des mots compris dans une chaine de caractères de type : sans-wri-j-aurais-fais-souvent-nimporte-quoi-avec-google. Cette variable est prise aléatoirement dans une bdd
Dans un premier temps, je vire les mots usuels comme, sans, fais ... :
Puis je retire tous les mots de 3 lettres et moins :
Mais, je voudrais que certains mots de 3 lettres compris dans un array précis ne soit pas supprimés s'ils sont présents dans la chaine initiale comme wri par exemple.
Tout ce que j'ai essayé n'a pas donné l'effet escompté
Une idée ?
Merci
Je chercher à améliorer un script que j'utilise sur un de mes sites.
Ce script à pour but d'extraire via un explode des mots compris dans une chaine de caractères de type : sans-wri-j-aurais-fais-souvent-nimporte-quoi-avec-google. Cette variable est prise aléatoirement dans une bdd
Dans un premier temps, je vire les mots usuels comme, sans, fais ... :
- Code: Tout sélectionner
$chaine = str_replace(array('sans', 'fais', quoi'), '', $chaine);
Puis je retire tous les mots de 3 lettres et moins :
- Code: Tout sélectionner
$chaine = eregi_replace("-(.{1,3}-)+|^(.{1,3}-)+|(-.{1,3})+$","-",$chaine);
Mais, je voudrais que certains mots de 3 lettres compris dans un array précis ne soit pas supprimés s'ils sont présents dans la chaine initiale comme wri par exemple.
Tout ce que j'ai essayé n'a pas donné l'effet escompté
Une idée ?
Merci
-

photoscope - WRInaute discret

- Messages: 64
- Inscription: 18 Déc 2004
Re: [PHP] Ajouter une exception dans une regex
Il existe certainement une solution bien plus gracieuce, en voici une craceuse qui m'est venue à l'esprit 
Si ton tableau de mot spéciaux n'est pas trop grand. Tu mets tes mots de 3 lettres dans un tableau.
Avant de faire ta regex, tu parcours ce tableau et tu leurs mets un suffixe, par exemple "MOTSPECIAL".
Tu appliques ta regex.
Puis tu convertis ta chaine en supprimant MOTSPECIAL de ta chaine.
C'est pas beau, mais à mon avis ça devrait fonctionner.
Si ton tableau de mot spéciaux n'est pas trop grand. Tu mets tes mots de 3 lettres dans un tableau.
Avant de faire ta regex, tu parcours ce tableau et tu leurs mets un suffixe, par exemple "MOTSPECIAL".
Tu appliques ta regex.
Puis tu convertis ta chaine en supprimant MOTSPECIAL de ta chaine.
C'est pas beau, mais à mon avis ça devrait fonctionner.
- jcaron
- WRInaute accro

- Messages: 2685
- Inscription: 13 Fév 2004
Re: [PHP] Ajouter une exception dans une regex
D'abord:
- ton str_replace va replacer des parties de mots aussi, par exemple persans -> per, faisant -> ant, pourquoi -> pour... Utilise soit une regex avec des \b autour, soit un explode et un traitement mot par mot
- tu peux simplifier ta regex en utilisant par exemple \b\w{1,3}\b (en utilisant preg_replace plutôt que eregi_replace, et en n'oubliant pas d'ajouter des délimiteurs). Ou utiliser une explode là aussi.
- de façon générale, utilise plutôt les preg_* que les ereg*
Si tu fais un explode, le traitement des mots spéciaux n'est pas difficile (il suffit de les tester avant de faire le test sur la longueur des mots). Si tu veux vraiment une regex, il va falloir utiliser une negative look-ahead assertion (preg_replace only):
'/\b(?!(?:mot_ok1|mot_ok2|mot_ok3)\b)\w{1,3}\b/'
Jacques.
- ton str_replace va replacer des parties de mots aussi, par exemple persans -> per, faisant -> ant, pourquoi -> pour... Utilise soit une regex avec des \b autour, soit un explode et un traitement mot par mot
- tu peux simplifier ta regex en utilisant par exemple \b\w{1,3}\b (en utilisant preg_replace plutôt que eregi_replace, et en n'oubliant pas d'ajouter des délimiteurs). Ou utiliser une explode là aussi.
- de façon générale, utilise plutôt les preg_* que les ereg*
Si tu fais un explode, le traitement des mots spéciaux n'est pas difficile (il suffit de les tester avant de faire le test sur la longueur des mots). Si tu veux vraiment une regex, il va falloir utiliser une negative look-ahead assertion (preg_replace only):
'/\b(?!(?:mot_ok1|mot_ok2|mot_ok3)\b)\w{1,3}\b/'
Jacques.
-

medium69 - WRInaute passionné

- Messages: 2485
- Inscription: 7 Mai 2005
Re: [PHP] Ajouter une exception dans une regex
photoscope a écrit:Il existe certainement une solution bien plus gracieuce, en voici une craceuse qui m'est venue à l'esprit
Si ton tableau de mot spéciaux n'est pas trop grand. Tu mets tes mots de 3 lettres dans un tableau.
Avant de faire ta regex, tu parcours ce tableau et tu leurs mets un suffixe, par exemple "MOTSPECIAL".
Tu appliques ta regex.
Puis tu convertis ta chaine en supprimant MOTSPECIAL de ta chaine.
C'est pas beau, mais à mon avis ça devrait fonctionner.
J'ai longtemps cherché une solution pour emp^cher le traitement par une REGEX.
Depuis, je me prend plus la tête.
Quand je traite ma chaîne, j'insère sur les termes qui ne doivent pas être traités plus tard par une regex, un "§§" (exemple§§)
J'ai choisi ce signe, car pratiquement aucune chance de le retrouver dans un texte.
Quand j'ai fini mes traitement, un petit str_replace sur mon "§§" et le tour est joué.
Maintenant, si tu trouves une autre solution, moins gourmande, je suis preneur.
-

GarGamel55 - Nouveau WRInaute

- Messages: 34
- Inscription: 28 Sep 2006
Re: [PHP] Ajouter une exception dans une regex
Merci pour vos réponses,
Je vais retravailler ce script
Je vais retravailler ce script
5 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Regex htaccess : ajouter un paramètre à un lien
- [PHP] Regex ?
- [PHP] REGEX pour dire OU
- Regex pour les PHP men
- [PHP] Probleme avec les regex
- [PHP-Regex] Capture d'un nom de dossier
- Dédoublage des espaces avec une regex php
- Aide pour script PHP (notamment Regex), récompensé
- On peut mettre une fonction php dans un pattern de regex ?
- [Regex] modifier une regex existante
- Mettez à jour la description de votre site dans l'annuaire WRI ! - 03-05-2010
- Nouveautés dans l'API Google Analytics (Septembre 2009) - 19-09-2009
- Gestion des droits d'accès dans Google Webmaster Tools - 03-03-2010
- MyMaps : des cartes personnalisées avec Google Maps - 05-04-2007
- Yandex Webmaster Tools : tutoriel en français - 25-02-2010
- YouTube Ready : le label des créateurs de sous-titres - 01-07-2010
- Ecrire un sitemap pour Google News - 25-11-2006
- Filtre Google Analytics pour trouver les questions des visiteurs - 14-09-2010
- Générateur de mots-clés
Cet outil vous fournit une liste de mots sémantiquement proches du mot que vous fournissez en entrée. Il peut servir à vous donner des idées de mots à utiliser sur vos pages, voire de contenus à ajouter.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
