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 :

Expression régulière avec matches()


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut Expression régulière avec matches()
    Bonjour,

    Après avoir fouillé un moment dans la doc je n'arrive toujours pas à trouver mon bonheur.

    Voilà, j'aimerai grâce à la méthode matches() de la classe String trouver une expression particulière.

    Je voudrai pouvoir faire matcher un string qui contient le caractère > (plus grand) précédé de n'importe quels autres caractères *.> mais pas un string qui contiendrai -> (tiré plus grand) précédé de n'importe quels autres caractères.

    Est-ce possible de le faire en UN SEUL APPEL de la fonction matches() ?

    Un grand merci à vous

    sun

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Oui, bien sûr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String s = "...";
    if (s.matches("[^-]>")) {
      ...
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup pour ta réponse mais je crainds que cela ne marche toujours pas.


    tests effectués :


    String s1 = "dffsdfafas>";
    String s2 = "dffsdfafas->";
    String s3 = "dffsdfafas";

    ton exemple ci-dessus renvoie a chaque fois false alors que j'aimerai pour

    s1 : true
    s2 : false
    s3 : false

  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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (s.matches(".*[^-]>")) {
     ...
    }
    Plus d'information sur les expressions régulière dans la documentation de la classe Pattern.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Est-ce que le caractère '>' se trouvera toujours à la fin ?

  6. #6
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    Oui, mais avec cette expression tu peux également en avoir avant ("dffs>dfafas>" par exemple)

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci les gars, vous êtes des chefs !!

    Merci pour le lien aussi.

    Autre question, j'ai la chaine de caracteres suivante formatée sur plusieurs lignes :

    Nom : blablabalbalalbalb
    Prenom : lalalalala


    %


    J'aimerai que le matches puisse détecter mon % (pour cent) qui est précédé d'un nombre de retour à la ligne indéfini. J'ai essayé sans succès : s.matches(".*%"). La doc ne m'est pas très clair malheureusement sur la mise en combinaison des regex.

    Merci encore

  8. #8
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    C'est parce que la méthode matches() utilise un Pattern sans flags (cf Pattern.compile()) or puisque ta chaine contient des caractères de saut de lignes il te faut utiliser le flag Pattern.DOTALL.
    Comme indiqué dans la doc il faut utiliser '?s' dans l'expression régulière pour activer ce flag.
    .

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Aille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
    ?s.*%
    ^

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    NE DITE PLUS RIEN

    correction : s.matches("(?s).*%")


    J'ai un peu honte quand même.

    Bon c'est vendredi, je vous paierai bien une bière à vous deux !

    Encore merci

  11. #11
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    J'ai corrigé mon message précédent .

    PS : Pense au bouton la prochaine fois

  12. #12
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Salut,


    Comment se lit (?s).*% SVP ?
    Je suis habitué aux regex mais pas en Java.

    Pourquoi le ? est-il devant le s ?
    Le point matche les ’\n’ ?
    Pas de ? après .* pour limiter le caractère gourmand ?





    Remarque: avec .*[^-]> il n’y aura pas matching sur une chaîne réduite au seul caractère ’>’. Cela ne présente sans doute pas d’intérêt de matcher avec un seul ’>’ , mais si le cas est rencontré, cela risque de produire une erreur.
    Il vaut mieux .*(?<!-)>

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Il faut lire l'ensemble

    "(?s)" est un flag qui signifie passer en mode dotall ou multiligne si tu préfères.

    Le reste de la construction semble en effet bancal.

  14. #14
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par dingoth Voir le message
    Il faut lire l'ensemble

    "(?s)" est un flag qui signifie passer en mode dotall ou multiligne si tu préfères.
    Attention ! Car il y a un flag MULTILINE et celui-ci n'a pas la même signification que DOTALL.

    Par défaut l'expression '.' ne matche pas le caractère de fin de ligne, avec le flag DOTALL si.
    Le flag MULTILINE lui concerne les expression '^' et '$' qui par défaut matchent respectivement le début et la fin de l'ensemble de la chaine de caractère traité. Avec le flag MULTILINE ces expressions matchent avant ou après les caractères de fin de ligne et le début et la fin de la chaine de caractère.

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

Discussions similaires

  1. [RegEx] Expression régulière avec preg_match_all
    Par tit_oune dans le forum Langage
    Réponses: 6
    Dernier message: 18/05/2006, 23h28
  2. Expressions régulières avec variable
    Par killprog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/04/2006, 17h03
  3. Expression réguliére avec CHECK
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/09/2005, 17h38
  4. Réponses: 7
    Dernier message: 27/07/2005, 12h41
  5. Expression régulière avec "|"
    Par YanK dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/07/2005, 15h09

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