IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Petite broutille sur expressions régulières [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Points : 45
    Points
    45
    Par défaut Petite broutille sur expressions régulières
    Bonjour à tous,

    voilà je vous explique mon problème.

    J'utilise les expressions régulières pour supprimer tout un tas d'éléments dans une chaine de caractères dont les prépositions, la ponctuation.... Le but étant à la fin de faire ressortir les mots clefs pour construire des paramètres d'un permalien.

    Ca marche très bien, mon seul soucis c'est que dès que ma chaine de caractères se termine par un signe de ponctuation, mon expression ne le retire pas alors qu'il devrait ! Je pense que je ne fais pas forcément les choses comme il faut mais j'ai parcouru le web à la recherche d'infos mais je ne m'en sors pas !

    La particularité de mon expression c'est qu'elle doit pouvoir supprimer la ponctuation et les prépositions n'importe où dans la chaîne, que ça soit en début, milieu ou fin de chaîne, et ce qu'il y ait un ou x espaces devant le mot ou le signe de ponctuation. Ca marche très bien sauf pour le cas de figure où ma chaine se termine par un signe de ponctuation !

    Avant toute chose, et pour que ça soit plus compréhensible pour vous, voici mon code en version allégé (je vous ai mis juste l'essentiel, normalement j'ai d'autres fonctions qui s'occupent de faire la suppression des doubles "-"..... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $machaine = "les expressions régulières sont un casse tête pour moi !";
    $prepositions = "un|une|le|la|les|et|de|du|des|\p{P}";        
    $machaine = preg_replace("/\b(\s)*($prepositions)(\s)*\b/i","-", $machaine);
    Dans ce cas là, j'obtiens : "- expressions régulières sont - casse tête pour moi !" alors que j'aurais aimé obtenir la même chose sans le "!". Si je place le point d'exclamation au milieu de ma chaîne, il est bien remplacé par "-" alors qu'en fin non.

    Savez vous pourquoi, qu'est ce que je fais mal, il y a t il une option supplémentaire à passer.

    Par avance grand merci pour vos conseils qui me permettront je l'espère de me retirer cette petite épine du pied !

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $pattern = "/(\b(un|une|le|la|les|et|de|du|des)\b | \B(!)\B)/ix";
    $str = "les expressions régulières sont ! un casse tête pour moi !";
    echo preg_replace($pattern, "***", $str);
    // Affiche :
    // *** expressions régulières sont *** *** casse tête pour moi ***
    ?>
    Qu'ai-je fait ?

    Tout d'abord j'ai simplifié ta pattern car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \b(un|une|le|la|les|et|de|du|des)\b
    était suffisant

    Ensuite pour le ! c'est un cas à part car il ne s'agit pas d'un caractère alphanumérique et donc pas d'un mot, or \b(\w*)\b (en gros c'est ce que tu as écrit) désigne qu'on doit trouver des caractères formant un mot, j'ai donc ajouté un OU avec son opposé \B\B

    PS : /x permet d'ajouter des espaces dans le pattern sans qu'ils soient pris en compte

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Points : 45
    Points
    45
    Par défaut
    Impeccable darkstar123456, grand merci pour ton aide et tes explications, ça marche nickel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/03/2008, 06h56
  2. [RegEx] Petite vérification d'expression régulière
    Par psychoBob dans le forum Langage
    Réponses: 23
    Dernier message: 04/06/2006, 21h28
  3. petit problème d'expression régulière
    Par stoyak dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2006, 11h20
  4. [regexp] petit problème d'expression régulière
    Par LE NEINDRE dans le forum Langage
    Réponses: 14
    Dernier message: 16/12/2005, 10h33
  5. [RegEx] Petit Bug sur Expression Régulière
    Par Delphy113 dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2005, 20h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo