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

Collection et Stream Java Discussion :

Probleme de regex


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut Probleme de regex
    Bonjour,
    J'ai un petit soucis avec les regex et plus particulièrement les méthodes compile,matches et find :

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Pattern p = Pattern.compile(".*\\{ATTRIBUTS\\}(.*)\\{/ATTRIBUTS\\}.*",Pattern.MULTILINE|Pattern.DOTALL);
    				Matcher m = p.matcher(retour);
    while(m.find()){
    					System.out.println(m.groupCount());
     
    }
    et voici le code inclus dans la variable "retour" :

    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
    <?php
    /******************/ 
    /** Classe :{CLASSE} **/ 
    /** Auteur : {AUTEUR}({EMAIL}) **/
    /** Langage : {LANGAGE} **/ 
    /** Création : {DATE} **/
    /** Description : {DESCRIPTION} **/
    /******************/
     
    class {CLASSE}
    {
     
    {ATTRIBUTS}
    	_ATTRIBUTACCES_ _ATTRIBUTPRETYPE_ _ATTRIBUTNOM_;{/ATTRIBUTS}
     
    /**
    * Constructeur de la classe {CLASSE}
    * @author {AUTEUR}
    * @version 1
    * @param aucun
    * @return rien
    */
    {ACCESSEURS}
    function __construct(){
    	echo 'code execute dans mon constructeur';
    }
    {/ACCESSEURS}
     
    function principale(){
    {ATTRIBUTS}
    	this._ATTRIBUTNOM_ = null ;{/ATTRIBUTS}
    }
     
    {ATTRIBUTS}
    	_ATTRIBUTNOM_ {/ATTRIBUTS}
     
    }
    ?>

    Dans tous les cas, le match ne me récupère que la dernière expression a savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {ATTRIBUTS}
    	_ATTRIBUTNOM_ {/ATTRIBUTS}
    et le groupCount est toujours a 1

    j'ai également essayé de mettre while(m.matches()){ et if(m.matches()){ mais rien n'y fait...

    Quelqu'un a t'il une idée ? Les regex sont puissantes mais encore obscures pour mon cerveau de néophyte.

    Amicalement.

    Idle

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    A quoi te servent les .* en début et fin de chaine ??? C'est ca qui te bouffe tout (le .* est très gourmand car il prendra tout !)

    Supprimes les si tu n'en as pas besoin ou utilises des .*? qui sont moins gourmand se s'arrêteront au résultat le plus court
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern.compile("\\{ATTRIBUTS\\}(.*?)\\{/ATTRIBUTS\\}",Pattern.MULTILINE|Pattern.DOTALL);
    Après pour t'aider plus il faudrait savoir ce que tu veux faire précisément...

    a++

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    Tous d'abord, merci beaucoup pour ta réponse, effectivement après réflexion ces .* ne servaient pas a grand

    chose, ils sont enlevés .

    Cependant mon problème reste inchangé, j'explique plus en détails ma situation :

    Je travaille sur un générateur de classes en java, étant donné que je suis amené a générer des classes pour de

    nombreux langages différents, j'ai voulu faire en sorte que mon générateur génère mes classes en fonction de

    modèles(templates) ainsi j'aurais un modèle de génération de classe pour php, un autre pour java, un autre

    pour c++/Qt etc...

    mon template (prenon le template php par exemple) est un fichier PHP.tpl qui ressemble a ç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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    /******************/ 
    /** Classe :{CLASSE} **/ 
    /** Auteur : {AUTEUR}({EMAIL}) **/
    /** Langage : {LANGAGE} **/ 
    /** Création : {DATE} **/
    /** Description : {DESCRIPTION} **/
    /******************/
     
    class {CLASSE}
    {
     
    {ATTRIBUTS}
    	_ATTRIBUTACCES_ _ATTRIBUTPRETYPE_ _ATTRIBUTNOM_;{/ATTRIBUTS}
     
    /**
    * Constructeur de la classe {CLASSE}
    * @author {AUTEUR}
    * @version 1
    * @param aucun
    * @return rien
    */
    {CONTRUCTEUR}
    function __construct(){
    	echo 'code execute dans mon constructeur';
    }
    {/CONTRUCTEUR}
     
     
    function toString(){
    {ATTRIBUTS}
    	echo this._ATTRIBUTNOM_+'<br>';
    {/ATTRIBUTS}
    }
     
    }
    ?>
    (bien sur ceci est une version simplifiée mais le principe y est)

    Mon programme java utilise ce template pour générer mon code (en remplaçant les balises majuscules entres

    accolades).

    Jusqu'ici aucune difficultée, ca se corse quand je souhaite faire des boucles de template (car certaines

    portions de codes doivent êtres generées pour chaques attributs)

    je veux donc recuperer toutes les boucles style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {ATTRIBUTS}
    	echo this._ATTRIBUTNOM_+'<br>';
    {/ATTRIBUTS}
    et les remplacer dans mon java par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0;i<mesAttributs.size()i++){
        sortie+= "echo this".mesAttributs.get(i)+"'<br>'";
    }
    ce qui génèrera au final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo this.attribut1+'<br>';
    echo this.attribut2+'<br>';
    echo this.attribut3+'<br>';
    j'ai donc utilisé le pattern compile, mais comme je l'ai precisé sur mon post initial, il ne fonctionne que

    pour la derniere occurence trouvée de {ATTRIBUTS}{/ATTRIBUTS}

    Voila voila, merci de m'avoir lu jusqu'au bout!! J'espère que quelqu'un parviendras a me débloquer parce

    que la je sèche depuis 2h du mat sur le problème...

    Amicalement

    Idle

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    Personne pour me débloquer ? je suis bêtement coincé il ne me reste quasiment que ça a régler pour finir mon programme...

Discussions similaires

  1. Probleme avec REGEX sous IE
    Par Death83 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 18/07/2006, 20h02
  2. [RegEx] Probleme de Regex
    Par keil dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2006, 14h14
  3. probleme de regex! (debutant)
    Par kriskikout dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2006, 23h00
  4. [langage] autre probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2004, 17h01
  5. [langage] probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2004, 15h36

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