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 :

Récupérer toutes les occurences d'une regex ?


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 68
    Points
    68
    Par défaut Récupérer toutes les occurences d'une regex ?
    Bonjour,

    Voilà 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
     
    public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		try{
    			String codeHTML = getIpFrom("http://www.google.com");
    			Pattern regex_masque;
    			Matcher regex_resultat;
     
     
    			//System.out.println(codeHTML);
    			regex_masque = Pattern.compile("(<a.*href=[\"']([^\"]*)[\"'].*>)",Pattern.CASE_INSENSITIVE);
    			regex_resultat = regex_masque.matcher(codeHTML);
     
    			System.out.println("Nombre de résultat(s) : " + regex_resultat.groupCount());
     
     
    			while(regex_resultat.find()) {
    				System.out.println("Le texte : " + regex_resultat.group(1));
    				System.out.println("Le texte : " + regex_resultat.group(2));
    			}
    		}
    		catch(PatternSyntaxException e){}
    	}
    Je récupère dans un premier temps tout le code HTML d'une page, et je cherche à en extraire tous les liens hypertextes. Je vais bien avoir les résultats pour un lien par "ligne", mais si plusieurs liens sont dans une même "ligne" alors je n'ai que le dernier

    Comment accéder à tous les autres ?

    Exemple si ma chaine à analyser est "<a href='t1.php'>toto</a>blabla<a href='dd.html'>titi</a>" je veux récupèrer t1.php et dd.html, mais actuellement je n'ai que dd.html

    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,


    2 remarques :
    • groupCount() ne te renvoit pas le nombre de résultat, mais le nombre de groupe dans ton expression régulière, c'est à dire le nombre de partie entre parenthèse.
    • Les bloc catch() vides peuvent être très dangereux ! A la rigueur il vaut presque mieux ne pas traiter l'exception plutôt que de l'ignorer comme cela... un printStackTrace() ne serait pas de trop !


    Quand à ton problème, c'est les '*' qui sont trop gourmand, et prennent la totalité de la ligne (tu peux voir cela en affichant le group() initial). En utilisant des '*?' tu limites la recherche à la section correspondante la plus courte...

    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
    		try {
    			String codeHTML = "<a href='t1.php'>toto</a>blabla<a href='dd.html'>titi</a>";// getIpFrom("http://www.google.com");
    			Pattern regex_masque;
    			Matcher regex_resultat;
     
    			// System.out.println(codeHTML);
    			regex_masque = Pattern.compile("<a.*?href=[\"']([^\"]*?)[\"'].*?>", Pattern.CASE_INSENSITIVE);
    			regex_resultat = regex_masque.matcher(codeHTML);
     
    			while (regex_resultat.find()) {
    				System.out.println("Le pattern trouvé : " + regex_resultat.group());
    				System.out.println("Le lien           : " + regex_resultat.group(1));
    				System.out.println();
    			}
    		} catch (PatternSyntaxException e) {
    			e.printStackTrace();
    		}

    a++

Discussions similaires

  1. Récupérer toutes les valeurs d'une liste déroulante
    Par christgh dans le forum Langage
    Réponses: 4
    Dernier message: 10/12/2008, 21h17
  2. récupérer tout les mails d'une liste de diffusion
    Par cyrano_de_bergerac dans le forum C#
    Réponses: 1
    Dernier message: 07/02/2008, 21h11
  3. [RegEx] Regex : récupérer toutes les occurences dans une chaîne
    Par Poulpynette dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2006, 10h14
  4. connaitre toutes les occurences d'une chaine
    Par semaj_james dans le forum C
    Réponses: 2
    Dernier message: 11/12/2005, 14h46

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