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 :

Problème de regex [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Par défaut Problème de regex
    Bonjour,

    J'ai la Regex suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne =  preg_replace("#\((.*)\)#","", $ligne);
    où $ligne est égale à

    H : ben c::: c’est (RIRE) normal là (en hochant la tête affirmativement)

    Je voudrais enlever le texte entre () comme (RIRE) et (en hochant la tête affirmativement). Mais présentement, ça supprime à partir de la première "(" jusqu'à la dernière ")".

    Où est mon erreur ??

    Merci de votre aide !!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Par défaut
    Hello,

    Il n'y a pas d'erreur. C'est juste que le comportement des regex est de prendre le plus grand bloc possible.
    Pour éviter ca, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne = preg_replace("#\(([^)]*)\)#","", $ligne);
    Cela cherche donc les expressions entre parentheses qui ne contiennent pas de parenthese fermante.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Par défaut
    Merci de votre rapidité !!

    Je viens de constater que dans certains cas, la regex fonctionne bien mais pas dans d'autres cas.

    avant :
    H : [1ben c::: c’est normal là (en hochant la tête affirmativement)

    après :
    H : [1ben c::: c’est normal là
    OK


    avant :
    R : [1moi ça fait longtemps que j’en ai (.) mais regarde (en pointant vers la télévision) sur la télévision qu’est-ce que j’ai là pour écouter la télévision là (en cachant ses oreilles avec ses poings, comme s’il portait des écouteurs) ¤<26024>

    après :
    R : [1moi ça fait longtemps que j’en ai

    Est-ce que le problème pourrait venir du (.) ou à cause que j'ai 3 ( ) dans mon texte ?

    En attente de votre réponse.

    Merci !

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Par défaut
    C'est parfait. C'est moi qui avait fait une erreur.

    Merci encore !

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par gdott9 Voir le message
    Hello,

    Il n'y a pas d'erreur. C'est juste que le comportement des regex est de prendre le plus grand bloc possible.
    Pour éviter ca, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne = preg_replace("#\(([^)]*)\)#","", $ligne);
    Cela cherche donc les expressions entre parentheses qui ne contiennent pas de parenthese fermante.
    En fait, il y a deux possibilités : la première est celle de gdott9 qui laisse la regex être "gourmande" mais qui réduit le domaine des caractères autorisés. C'est la plus performante mais pas forcément la plus lisible. Au passage, une paire de parenthèses étaient en trop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne = preg_replace("#\([^)]*\)#","", $ligne);
    La deuxième solution, un peu moins performante mais plus agréable à l'oeil est d'empêcher la regex d'être gourmande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne = preg_replace("#\(.*?\)#","", $ligne);
    Question de choix.

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

Discussions similaires

  1. [Java] Problème de Regex
    Par spk4ever dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/08/2006, 10h51
  2. Problème avec Regex
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/07/2006, 14h50
  3. problème de regex
    Par lanfeust42 dans le forum Langage
    Réponses: 11
    Dernier message: 12/07/2006, 15h32
  4. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  5. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26

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