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 :

expression régulière en java


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    Par défaut expression régulière en java
    bonjour, j'Essaie de savoir si un string que je lis correspond à une méthode et je veux le faire avec les expression régulière(même si je n'y connais rien).
    Exemple la ligne public String Méhode()..j'ai essayé ça [^private|public|protected\s][w*\s][\w*][\(]...mais ça ne marche pas
    quelqu'u pourrait-il m'aider..ou me donner un tutoriel qui donnerais des exemples
    merci
    shirya

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    Par défaut
    rebonjour
    voici ce que j'ai trouvé
    public|private|protected\s+[\w]*\s*[\w]+\s*[\(]+

    seulement, il accepte les ligne du genre:
    public type nomMethode
    pourtant je voudrais que ça n'accepte pas les ligne qui ne contiennent pas de "("....à la fin de ma regex, je fais \(+...mais il accepte quand même les ligne sans parenthèse...pouvez vous m'aider
    merci

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Tu es sûr que tu parles d'une expression régulière java?

    Normalement, celle ques tu nous donnes dans tes deux posts précédents n'ont pas dû être acceptées par le compilateur (il faut doubler les '\')
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Si tu veux faire une une expression régulière représentant la signature d'une méthode elle ne sera pas aussi simple.
    En effet il faut penser qu'un type peut être indiqué avec son package (cf "java.lang.String"), il peut y avoir des tableaux dans les paramètres
    (ou même une ellipse), les noms doivent commencer par une lettre mais peuvent contenir des chiffres ou des '_', etc

    Par exemple voici une telle expression régulière (attention, elle pique les yeux ) :

    \s*(((static)|(synchronized)|(native))\s+)*\s*(((public)|(protected)|(private))\s+)?(((static)|(synchronized)|(native))\s+)*\s*(\p{Alpha}(_|\p{Alnum})*(\.\p{Alpha}(_|\p{Alnum})*)*)?\s+\p{Alpha}(_|\p{Alnum})*\s*\(\s*((\p{Alpha}(_|\p{Alnum})*(\.\p{Alpha}(_|\p{Alnum})*)*((\s*(\[\])\s*)|(\s+))\p{Alpha}(_|\p{Alnum})*\s*(,\s*\p{Alpha}(_|\p{Alnum})*(\.\p{Alpha}(_|\p{Alnum})*)*((\s*(\[\])\s*)|(\s+))\p{Alpha}(_|\p{Alnum})*)*(\s*,\s*\p{Alpha}(_|\p{Alnum})*(\.\p{Alpha}(_|\p{Alnum})*)*((\s*((\.\.\.)|(\[\]))\s*)|(\s+))\p{Alpha}(_|\p{Alnum})*\s*)?)|(\p{Alpha}(_|\p{Alnum})*(\.\p{Alpha}(_|\p{Alnum})*)*((\s*((\.\.\.)|(\[\]))\s*)|(\s+))\p{Alpha}(_|\p{Alnum})*))?\s*\)\s*

    Pour faire un peu moins bourrin, voici un code construisant cette expression régulière en découpant les différentes partie la composant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    String name = "\\p{Alpha}(_|\\p{Alnum})*";
    String fullname = name + "(\\." + name + ")*";
    String visibilityRegex = "(public)|(protected)|(private)";
    String modifiersRegex = "(static)|(synchronized)|(native)";
    String returnTypeRegex = "(" + fullname + ")?";
    String argRegex = fullname + "((\\s*(\\[\\])\\s*)|(\\s+))" + name;
    String varArgRegex = fullname + "((\\s*((\\.\\.\\.)|(\\[\\]))\\s*)|(\\s+))" + name;
    String argsRegex = "(" + argRegex + "\\s*(,\\s*" + argRegex + ")*(\\s*,\\s*" + 
                    varArgRegex + "\\s*)?)|(" + varArgRegex + ")";
     
    String methodRegex = "\\s*((" + modifiersRegex + ")\\s+)*\\s*((" + visibilityRegex + 
                    ")\\s+)?((" + modifiersRegex + ")\\s+)*\\s*" + returnTypeRegex +
                    "\\s+" + name + "\\s*\\(\\s*(" + argsRegex + ")?\\s*\\)\\s*";
    Cette expression régulière reste cependant imparfaite, notamment au niveau des "modifieurs" (static, native, synchronized) qui,
    contrairement à ce que permet cette expression, ne peuvent être présent qu'une seule fois chacun et sont interdit pour les constructeurs.

    PS : désolé pour la déformation du forum
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    Par défaut
    merci pour la réponse
    au fait le y@m's , tu m'as arraché 4.29 kg de chair.
    bye

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2009, 08h31
  2. Les expressions régulières en java
    Par blackhock dans le forum Général Java
    Réponses: 2
    Dernier message: 21/04/2009, 13h05
  3. Expression régulière avec java
    Par mouvma dans le forum Général Java
    Réponses: 2
    Dernier message: 18/01/2008, 17h00
  4. expression régulière en java
    Par Karine2007 dans le forum Langage
    Réponses: 9
    Dernier message: 07/07/2007, 12h35
  5. Expressions régulières en Java
    Par jason69 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 04/07/2007, 10h50

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