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 :

Vérifier les parenthèses [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Points : 123
    Points
    123
    Par défaut
    Salut,
    je veux un regexp pour verifier pour chaque parentheses ouverte j'ai une parenthese fermée
    exemple :
    (val1 and val2) or (val3 or val4)

    en fait cette regExp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var regex =new RegExp("\([^\)]*\)", "g");
     if (regex.test(maChaine)) {            
                true;
            } else {       
                false;         
            }
    marche pas.
    si je tape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var maChaine = "(1 and (2 or 3) and 4
    il m'envoyer true.

    merci de m'aider

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    le come back du retour de la vengeance ...

    Il me semble que l'on t'a déja expliqué que la recursivité n'existait pas en regExp...

  3. #3
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    idee a 2 francs : pourquoi ne pas compter le nombre de parentheses ouvertes puis le nombre de parentheses fermees.
    if(($total_ouverte - $total_fermee) != 0)
    echo 'pas bon';

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    par contre en php il est possible de parcourrir la chaine et la parser à la recherche de ( puis de (...
    à chaque occurrence de ( on incrémente une variable, à chaque occurrence de ) on la décrémente
    si à la fin de la chaine on a 0 et que l'on n'est jamais passé par du négatif
    c'est tout bon ...

  5. #5
    Membre régulier Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Points : 123
    Points
    123
    Par défaut
    Salut,
    Merci de votre Reponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
              var incr = 0;
              for(var i =0 ; i < maCahine.length; i++){
                    if(maCahine[i] == '('){
                       incr++;
                    }
                    if(maCahine[i] == ')'){
                        incr--;
                    } 
                }
    Citation Envoyé par SpaceFrog Voir le message
    si à la fin de la chaine on a 0 et que l'on n'est jamais passé par du négatif
    c'est tout bon ...
    ???????????????

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    ben teste ...

  7. #7
    Membre régulier Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Points : 123
    Points
    123
    Par défaut
    Salut
    j'ai trouvé cette regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $str=~/(\((?:(?>[^()]+)|(?1))*\))/;
    mais cette regxp en Perl et moi je veux l'utiliser en javascript..
    Y'at-il quelqu'un qui peut m'aider à transformer ce regex en javascript?

    merci d'avance

  8. #8
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Doksuri Voir le message
    idee a 2 francs : pourquoi ne pas compter le nombre de parentheses ouvertes puis le nombre de parentheses fermees.
    if(($total_ouverte - $total_fermee) != 0)
    echo 'pas bon';
    Cette solution me semble suffisante pour le but recherché, mais si vraiment tu veux te compliquer la vie, tu peux garder les regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    $reg = '/\((?:[^()]*|(?R))*\)|[\w ]+/';
     
    $str = '(val1 and (val2 or val5)) or (val3 or val4)';
    preg_match_all($reg, $str,$m);
    print implode('', $m[0]) == $str ? "ok":"ko";
     
    $str = '(val1 and (val2 or val5) or (val3 or val4)';
    preg_match_all($reg, $str,$m);
    print implode('', $m[0]) == $str ? "ok":"ko";
    PS : oui, c'est de la récursivité...

  9. #9
    Membre régulier Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Points : 123
    Points
    123
    Par défaut
    Salut,
    merci de votre reponse,
    j'ai deux question :
    je peux utiliser ce regexp en javascript ?
    (?R) Ce que cela signifie ?

    merci de votre reponse

  10. #10
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    (?R) est pour la récursivité, et c'est pour cela que je ne pense pas que ce soit faisable en javascript.

  11. #11
    Membre régulier Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Points : 123
    Points
    123
    Par défaut
    Salut
    merci de votre reponse
    en fait il me semble que c'est pas possible avec les regexp javascript car je pense que les lookbehind n'existe pas :
    (?<=X) positive lookbehind.
    (?<!X) negative lookbehind .
    en javascript...
    par contre j'ai essayé avec ça :
    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
     
    var incr = 0; 
    var parentheseOk = false; 
    for(var i =0 ; i < maChaine.length; i++){ 
         if(maChaine[i] == '('){ 
             incr++; 
         } 
         if(maChaine[i] == ')'){ 
            incr--; 
            if (incr < 0) { 
                break;
            } 
         }
    }
    alert(incr);
    parentheseOk = (incr == 0) ;
    alert(parentheseOk);
    et il me semble ça marche
    merci et Bon dev

  12. #12
    Membre régulier Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Points : 123
    Points
    123
    Par défaut
    Re,
    en cours mieux :

    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
     
    var incr = 0; 
            var parentheseOk = false; 
            for(var i =0 ; i < maChaine.length; i++){             
                if(maChaine[i] == '('){ 
                    incr++; 
                } 
                if(maChaine[i] == ')'){ 
                    incr--; 
                    if (incr < 0) { 
                        break;
                    } 
                }
            }
            parentheseOk = (incr == 0);
    alert(parentheseOk);

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

Discussions similaires

  1. [Regex] Comment gérer les parenthèses ?
    Par davcha dans le forum Framework .NET
    Réponses: 7
    Dernier message: 27/03/2006, 14h28
  2. Fonction "Vérifier les noms" dans Outlook
    Par vciofolo dans le forum Access
    Réponses: 2
    Dernier message: 15/03/2006, 08h35
  3. [C#][WinForms][DataGrid]Vérifier les valeurs saisies
    Par loverdose dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/12/2005, 11h29
  4. [Formulaire] vérifier les champs avant enregistrement
    Par julien_t_m dans le forum Access
    Réponses: 5
    Dernier message: 16/10/2005, 20h53

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