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 exclusion REGEX


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Problème exclusion REGEX
    Tout d'abord bonjour,

    je vais essayé de vous exposer mon problème le plus simplement possible.

    J'aimerai exclure tout ce qui est écrit en majuscule et se trouvant entre 2 crochet comme ceci [A-Z].

    Mon code est :
    Mon résultat fonctionne partiellement, le problème c'est qu'il exclus aussi les majuscule qui ne se trouve pas dans les crochets.

    Le résultat devrait être:
    [HELLO] --> exclus
    [Hrelfkdlm] --> non exclus
    HELLO --> non exclus

    Le résultat est :
    [HELLO] --> exclus
    [Hrelfkdlm] --> exlus les crochets et la majuscule
    HELLO --> exclus

    J'ai tenter de grouper mes crochets et mon UPPER avec des parenthèses puis des crochets mais en vain...

    Si quelqu'un aurait une solution, merci de me la donner.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 39
    Points : 47
    Points
    47

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    ça ne fonctionne pas, mais merci de la réponse, juste une indication supplémentaire je veux exclure par exemple :
    $expression = array(
    '[IMG]',
    '[PSEUDO]',
    '[PAIEMENT]',
    '[/PAIEMENT]',
    '[INFOS]',
    '[/INFOS]',
    '[SEXE]',
    '[LANGUES]',
    '[STATUT]'
    );
    Y a t'il moyen de dire d'exclure chaque ligne du tableau en testant une par une ? C'est peut être plus lourd mais si c'est plus facile ...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 39
    Points : 47
    Points
    47
    Par défaut
    Fais voir comment tu as testé ma regexp ?

    Elle devrait matcher tout ce qui ne contient que des majuscules entre crochets, ce qui n'a pas l'air d'être exactement ce que tu veux, mais devrait fonctionner sur tous ceux qui n'ont pas de /.

    Ensuite tu devrais pouvoir simplement l'adapter.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $replace2 = preg_replace("#/\[[A-Z]+\]/#",'$result_str []= \'' . "$0" . '\';' . "\n",$string);
    Je remplace tout ce qui n'est pas entre crochet en majuscule par ce que je veux, et le remplacement fonctionne mais pour l'instant il ne remplace pas non plus les MAJUSCULE hors crochet... Alors qu'il devrait... C'est exactement ce que je veux mais je te proposait l'autre proposition peut être plus facile mais plus lourde car au lieu d'exclure une chaine on exclurai le mot par mot...

    [BONJOUR] --> Ne pas remplacer
    BONJOUR --> Remplacer
    [bonjour] --> Remplacer en prenant les crochets
    bonjour --> Remplacer
    [BonjouR] --> Remplacer

    Merci pour ta réponse ;-)

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    sur un remplacement, il est difficile de travailler par exclusion ; il vaut mieux inverser le raisonnement et dire que tu veux remplacer ce qui est entre tes éléments spéciaux.

    1er exemple, si on considère qu'il n'y a pas du tout de crochets en-dehors de tes [IMG], [PSEUDO], etc. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $replace2 = preg_replace( 
        #(^|\])(.*?)(\[|$)#, 
        "$result_str []= '$2';\n$3", 
        $string);
    (Au passage j'ai simplifié le deuxième argument en utilisant une chaîne interprétée.)

    2ème exemple : s'il peut y avoir des crochets en-dehors, on vérifie vraiment le contenu des crochets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $replace2 = preg_replace( 
        #(^|\[[[:upper:]]+\])(.*?)(?=\[[[:upper:]]+\]|$)#, 
        "$result_str []= '$2';\n", 
        $string);
    à noter que j'ai remplacé la troisième paire de parenthèses par une assertion avant positive (?=...), pour ne pas avaler le [XXX] et le laisser dispo pour la reconnaissance suivante. Du coup, il n'y a plus besoin de $3 dans le remplacement.

    3ème exemple : on utilise cette fois-ci la liste limitative que tu as construite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    $expression = array(
       '[IMG]',
       '[PSEUDO]',
       '[/?PAIEMENT]',
       '[/?INFOS]',
       '[SEXE]',
       '[LANGUES]',
       '[STATUT]'
    );
     
    $expression = join('|', $expression) ;
    $expression = str_replace('[', '\\[', $expression) ;
    $expression = str_replace(']', '\\]', $expression) ;
    echo $expression ; // juste pour vérifier
     
    $replace2 = preg_replace( 
        #(^|($expression))(.*?)(?=($expression)|$)#, 
        "$result_str []= '$3';\n", 
        $string);
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

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