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 :

Regexp pour parser un fichier de type hosts


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut Regexp pour parser un fichier de type hosts
    Bonsoir,

    J'ai toujours du mal avec ces regexp, je veux juste parser le fameux fichier hosts, histoire d'afficher son contenu ...

    Pour parser une ligne :
    192.168.1.1 Test # Tests
    Je fais une regexp pour l'adresseIP et une pour le nom de la machine et une pour la description :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String regexpIP="\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b";
             String regexpNom="[^#\r\n]*" ;
             String regexpDescription="^#.*$";//^\s*#.*$;
    En faisant recherche j'ai bien trouvé la bonne regexp pour l'IP, mais pour le reste, c'est plutôt plus simple, mais voilà ça bloque :/

    en fait tout le code, si vous voulez :

    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
    39
    40
    41
    int index = 0,end1=0,end2=0 ;
          Matcher matcher1=null,matcher2=null,matcher3 = null;
            // String regexp="\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b\\";
             String regexpIP="\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b";
             String regexpNom="[^#\r\n]*" ;
             String regexpDescription="^#.*$";//^\s*#.*$;
             Pattern SEPARATOR_PATTERN1 = Pattern.compile(regexpIP);
             Pattern SEPARATOR_PATTERN2 = Pattern.compile(regexpNom);
             Pattern SEPARATOR_PATTERN3 = Pattern.compile(regexpDescription);
     
             String Ligne[] = null; 
     
            try {
                Ligne=LireLigne.LireString("hosts");
     
     
            } catch (IOException ex) {
                Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
            }       
           // if (matcher != null)matcher.reset(Ligne[index]);
        matcher1 = SEPARATOR_PATTERN1.matcher(Ligne[index]);        
            matcher2 = SEPARATOR_PATTERN2.matcher(Ligne[index]);
            matcher3 = SEPARATOR_PATTERN3.matcher(Ligne[index]);
     
     
     
     // Using find 
    while(matcher1.find()) {
           String match1 = Ligne[index].substring(matcher1.start(),matcher1.end());            
           System.out.println("debut =>"+matcher1.start()+" match "+match1+" fin =>"+matcher1.end());
           end1=matcher1.end();
    }
    while(matcher2.find()) {
           String match2 = Ligne[index].substring(end1,matcher2.end());             
         //  System.out.println("debut =>"+end1+" match "+match2+" fin =>"+matcher2.end());
           end2=matcher2.end();
    }
    while(matcher3.find()) {
           String match3 = Ligne[index].substring(end2,matcher3.end());             
          System.out.println("debut =>"+end2+" match "+match3+" fin =>"+matcher3.end());
    }

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Si tu as toujours ce pattern : "[IP] [nom] # [Description]" avec les espaces et toujours dans cet ordre, pourquoi ne pas simplement faire un split sur la chaîne au niveau des espaces ?
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Si tu as toujours ce pattern : "[IP] [nom] # [Description]" avec les espaces et toujours dans cet ordre, pourquoi ne pas simplement faire un split sur la chaîne au niveau des espaces ?
    Oui j'y ai pensé, mais c'est pas très propre, pourquoi ne pas faire un split selon ce que je peux avoir, c'est vrai un nom de machine ne doit pas contenir des espaces, mais là je préfère spliter en prenant en compte le signe "#" du commentaire, cad prendre tout le nom jusqu'à ce qu'on se retrouve avec le signe commentaire.

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Petit truc rapide que j'ai fait :

    Code java : 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
    String ligne = "127.0.0.1 Test # test";
    int debut = 0;
     
    Matcher matchIp = Pattern.compile("\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b").matcher(ligne);
     
    while (matchIp.find())
    	{
    		System.out.println(ligne.substring(debut, matchIp.end()));
    		debut = matchIp.end();
    	}
    ligne = ligne.substring(debut);
    debut = 0;
    System.out.println(ligne+" ; début : "+debut);
    Matcher matchNom = Pattern.compile("\\w+\\s?#").matcher(ligne);
     
    while (matchNom.find())
    	{
    		System.out.println(matchNom.end());
    		System.out.println(ligne.substring(debut, matchNom.end()));
    		debut = matchNom.end();
    	}
     
    ligne = ligne.substring(debut);
     
    System.out.println(ligne);
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    Non ça ne marche pas.

    Mais avec ceci, je m'approche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String regexpIP="\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b";
             String regexpNom="\\s\\b[a-zA-Z0-9_]+\\b\\s";
             String regexpDescription="#.*\\w+";
    Mais je veux pas récupérer les espaces aussi entre les deux autres séparation.

    C'est peut être bête, mais c'est quoi la regexp pour séparer avec des espaces? (je commence à chercher le truc le plus facile)

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Tu peux être plus explicite sur le "ça ne marche pas" s'il te plaît ? ^^'
    Avec ce que j'ai testé, j'obtiens bien les 3 champs séparément. Il faut encore faire un peu de traitement dessus par contre (virer espace en trop, virer le #).

    Concernant ta question, \s prend les espaces, tabulations, sauts de ligne et sauts de page.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

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

Discussions similaires

  1. [JDOM] Problème pour parser un fichier XML [débutant]
    Par adn013 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/05/2007, 12h00
  2. fonction pour parser un fichier
    Par Dirty Harry dans le forum Langage
    Réponses: 7
    Dernier message: 30/01/2007, 05h13
  3. Réponses: 2
    Dernier message: 14/09/2006, 15h22
  4. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  5. [SAX] Probleme pour parser un fichier
    Par aymron dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 25/11/2005, 15h48

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