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 Java Discussion :

Regex bloque l'application


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut Regex bloque l'application
    Bonjour tous le monde
    je ne sais pas si c'est le bon forum, mais j'espere trouvé ici un peu d'aide pour mon probleme

    j'ai ecris une fonction pour traiter des textes avec des expressions regulieres, et surtout donner à l'utilisateur la posibilité de tester ses expressions comme il veus, donc si c'est bon, il a le resultat sinon il 'a le message que la regex est fause.
    voila mon code.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public void B_result_actionPerformed(ActionEvent e)
    {
        String text = this.Edit_msgTxt.getText();  
        ComboResult.removeAllItems();
        String regex =Edit_Regex.getText();
        RE r = null;
        try{
             r = new RE(regex);
        }catch(RESyntaxException REex) {ComboResult.addItem(REex);}
     
        Boolean bool=false;
     
        bool= r.match(text);
     
        if(bool)
          {
               String str="";
               for (int i = 0; i < r.getParenCount(); i++)
               {
                     if(r.getParenLength(i)>0)
                     {
                        str=r.getParen(i);
                     }
                     else
                     {
                         str="NO MATCH";
                     }
                     ComboResult.addItem(i+")  "+str);
     
              }//end for
     
           }//end if
     
           else
           {
              ComboResult.addItem("Failed match");
         }
     
    }
    j'etulise le package

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        org.apache.regexp.RE
    mon probleme est le suivant:
    la procedure marche dans la majorité des cas super bien, danc renvoi les groupe quand ça match sinon "Failed match" dans le cas contraire.
    mais parfois l'apllication block sur et là c'est la cata, il faut se servir du gestionnaire des taches pour terminer l'application. en plus j'ai aucune exception de retour. si comme s'il est rester bloquer dans une boucle dans la fonction match(texte).

    est ce que quelq'un à déjà eu ce problemme avec cette classe "org.apache.regexp.RE" ou bien qu"il peu m'aider à voir plus clair sur le sujet.

    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Avec quel type de regexp cela bloque-t-il ? Certaines regexp qui peuvent sembler simple peuvent être très complexe à gérer sur de grand texte...

    a++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    saluut
    cella par exemple bloque tjr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (:61:)([0-9]{6})([0-9]{4})?(C|D|RC|RD)([A-Z]{1})?([0-9,]{1,15})([A-Z]{1}[A-Z0-9]{3})([A-Za-z0-9\/-?:\(\).,'+ ]{1,16})(\/\/([A-Za-z0-9\/-?:\(\).,'+ ]{1,16}))?(\r\n)(([^:]{1}[A-Za-z0-9\/-?:\(\).,'+ ]{1,33})(\r\n))?
    portant avec une toute petite modification ne bloque plus. mais ce qui est embetent ce que on peut pas gerer tjr ce que l'utilisateur peut entrer.

    merci [/code]

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Lance l'évaluation dans un thread. Ton programme principal attend la fin de l'excécution sur un join avec un timeout.
    Bien le bonjour chez vous
    Jowo

  5. #5
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    osoumayaj : Cela peut dependre de la maniere dont est implemente le moteur d'evaluation des regex. Il existe deux sortes de moteurs, les NFA et les DFA. Les deux fonctionnent tres bien mais dans certains cas particuliers on peut avoir des surprises. Par exemple j'ai deja vu des regex qui "bloquent" (apres analyse la regex ne mettait en fait que quelques milliers d'annees a etre resolue un type de moteur mais pas l'autre.

    Tu trouveras des infos a ce sujet sur la Wikipedia :
    http://en.wikipedia.org/wiki/Nondeterministic_finite_state_machine
    http://en.wikipedia.org/wiki/Deterministic_finite_state_machine
    http://en.wikipedia.org/wiki/Regular_expression

    Regarde notamment la derniere URL dans la section "Implementations and running times".
    Romain Guy
    Android - Mon livre - Mon blog

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    bonjour
    merci pour vos reponces
    j'ai lu les docs , je comprend que l'algoritme backtracking est le responsable du bug pour certaines regex, en mettant enormement de temps (même jsqu'à l'infini ) dans son analyse. mais en presente aucune solution, en tout cas j'ai essayé de trouver dans les docs , mais comme c'est en anglais assez compliqué ...
    il me reste la solution d'executer le code dans un tread, ce qui va me prendre certenement un temp fou , parceque j'ai aucune idée de ça, et comme j'ai pas suivi un cour de java, est ce que vous pouvez me conseillé un doc

    merci encore

  7. #7
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Tu peux lire le livre Maitrise des Expressions Regulieres aux editions O'Reilly. Sinon tu peux essayer d'ecrire ta regex de maniere differente.
    Romain Guy
    Android - Mon livre - Mon blog

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par Gfx
    Tu peux lire le livre Maitrise des Expressions Regulieres aux editions O'Reilly. Sinon tu peux essayer d'ecrire ta regex de maniere differente.
    Cher Gfx,

    le problème de osoumayaj est que l'expression rationelle exécutée est saisie par l'utilisateur de son programme.

    Donc il n'a aucun contrôle sur l'expression rationelle.

    osoumayaj utilise Swing comme GUI peut être pourrrais-tu l'aiguiller sur l'utilisation d'action-utilisateur avec des threads?
    Bien le bonjour chez vous
    Jowo

  9. #9
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Herm... note pour plus tard : relire le debut du sujet avant de continuer la discussion ^^
    Romain Guy
    Android - Mon livre - Mon blog

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par Gfx
    Herm... note pour plus tard : relire le debut du sujet avant de continuer la discussion ^^
    Dois-je prendre cette remarque comme personnelle :
    Bien le bonjour chez vous
    Jowo

  11. #11
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Pas du tout, cette remarque m'etait auto-destinee
    Romain Guy
    Android - Mon livre - Mon blog

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    Salut
    j'ai resolu le probleme avec un thread.
    j'ai mis le code dans un tread
    et dans le programe principale j'ai executer le thread et j'ai fait un sur le thread.
    ça marche super bien.
    merci pour vos reponces c'est trés gen til

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

Discussions similaires

  1. Problème de readLine() qui bloque mon application
    Par critok dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 15/08/2012, 21h20
  2. [WD15] WaitForMultipleObjects dans un thread bloque mon application
    Par peijnoob dans le forum WinDev
    Réponses: 1
    Dernier message: 22/04/2010, 11h39
  3. Réponses: 0
    Dernier message: 09/12/2008, 10h30
  4. Méthode qui bloque l'application
    Par Mister Nono dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2008, 11h44
  5. [TSQLQuery] Arrêt de l'ouverture bloque l'application
    Par WebPac dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/05/2006, 12h24

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