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 :

[REGEXP] Sous chaine commene par et fini par...


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut [REGEXP] Sous chaine commene par et fini par...
    Bonjour,

    Je cherche à trouver les sous chaines commançant par "ta." et se terminant par un nombre.

    En gros pour la chaine Blabla|ta.gb.51,|blabla,ta.ze.256
    Je voudrait qu'on me retourne ta.gb.51,ta.ze.256

    J'ai le code suivant :
    String str = "Blabla|ta.gb.51,|blabla,ta.ze.256";
    String pat = "(ta\\..*[0-9])+";

    Pattern p = Pattern.compile(pat);
    Matcher m = p.matcher(str);
    boolean isOk = m.matches();
    System.out.println("isOK="+isOk+" nbgrp="+m.groupCount());
    if(isOk){
    for(int i = 0; i < m.groupCount(); i++){
    System.out.println("Occurence "+i+" : "+m.group(i));
    }
    }
    Visiblemnt ça marche pas du tout

  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,


    La méthode matche() vérifie que l'ensemble de la chaine correspondent bien au pattern. Pour rechercher des occurences à l'intérieur d'une chaine plus longue tu dois utiliser find() et group() comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            String str = "Blabla|ta.gb.51,|blabla,ta.ze.256";
            String pat = "ta\\..*?[0-9]+";
     
            Pattern p = Pattern.compile(pat);
            Matcher m = p.matcher(str);
            int i= 0;
            while (m.find()) {
                System.out.println("Occurence "+i+" : "+m.group());
                i++;
            }
    Le pattern .*? recherchera la chaine correspondante la plus petite, cela permet d'éviter que la chaine ta.gb.51,|blabla,ta.ze.256 te soit retourné...

    a++

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Merci ça marche impec, et j'ai compris la subtilité de matches!

    Encore merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/03/2014, 12h07
  2. Réponses: 3
    Dernier message: 05/01/2007, 16h50
  3. [RegEx] chaine commencant par X et qui fini par Y
    Par oamram dans le forum Langage
    Réponses: 4
    Dernier message: 22/11/2006, 16h50
  4. [VB6] Recherche d'une chaine commençant par XX
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/05/2006, 10h23
  5. Réponses: 10
    Dernier message: 24/02/2004, 13h28

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