[PHP] Ajouter une exception dans une regex

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par GarGamel55, 10 Mai 2010.

  1. GarGamel55
    GarGamel55 WRInaute discret
    Inscrit:
    28 Septembre 2006
    Messages:
    106
    J'aime reçus:
    6
    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 ... :
    Code:
    $chaine = str_replace(array('sans', 'fais', quoi'), '', $chaine);
    Puis je retire tous les mots de 3 lettres et moins :
    Code:
    $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é :oops:

    Une idée ?

    Merci
     
  2. photoscope
    photoscope Nouveau WRInaute
    Inscrit:
    18 Décembre 2004
    Messages:
    46
    J'aime reçus:
    0
    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.
     
  3. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    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.
     
  4. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    1 940
    J'aime reçus:
    3
    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.
     
  5. GarGamel55
    GarGamel55 WRInaute discret
    Inscrit:
    28 Septembre 2006
    Messages:
    106
    J'aime reçus:
    6
    Merci pour vos réponses,

    Je vais retravailler ce script
     
Chargement...
Similar Threads - [PHP] Ajouter exception Forum Date
Astuce [PHP] Récolter ville, pays du visiteur Développement d'un site Web ou d'une appli mobile 9 Mars 2021
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 14 Septembre 2019
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 12 Janvier 2017
[PHP] Cookie vide dans une fonction, complet juste avant ou après Développement d'un site Web ou d'une appli mobile 25 Novembre 2014
[php] Cookie d'un domaine vers un sous-domaine Développement d'un site Web ou d'une appli mobile 29 Août 2014
[PHP]Cci mails Développement d'un site Web ou d'une appli mobile 18 Août 2014
[PHP] gethostbyname Développement d'un site Web ou d'une appli mobile 15 Février 2014
[PHP] file_get_contents retourne un "Connection timed out" Développement d'un site Web ou d'une appli mobile 14 Février 2014
[PHP] Regex Complexe Développement d'un site Web ou d'une appli mobile 29 Octobre 2013
[PHP] Formulaire dynamique Développement d'un site Web ou d'une appli mobile 2 Mai 2013
[php] error suite à code antiduplication Développement d'un site Web ou d'une appli mobile 5 Février 2013
[PHP] Condition et include Développement d'un site Web ou d'une appli mobile 31 Janvier 2013
[PHP] comprendre ce code pour pseudo-frame Développement d'un site Web ou d'une appli mobile 28 Décembre 2012
[PHP] Requête très lente Développement d'un site Web ou d'une appli mobile 22 Septembre 2012
[PHP] Question technique Regex Développement d'un site Web ou d'une appli mobile 28 Juillet 2012
[PHP] file_get_contents sur le serveur même... Développement d'un site Web ou d'une appli mobile 9 Juillet 2012
[PHP] FILTER_VALIDATE_IP et REMOTE_ADDR Développement d'un site Web ou d'une appli mobile 8 Juillet 2012
[PHP] Requête PDO à modifier Développement d'un site Web ou d'une appli mobile 13 Mai 2012
[PHP] Détecter l'OS, le navigateur et la langue [Résolu] Développement d'un site Web ou d'une appli mobile 4 Mars 2012
[Php] Vérifier la présence d'un slash en fin d'url Développement d'un site Web ou d'une appli mobile 2 Mars 2012