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 :

[Expressions Régulières] Recherche de blocs dans un fichier de configuration.


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut [Expressions Régulières] Recherche de blocs dans un fichier de configuration.
    Bonjour je travaille sur le parseur d'un fichier DHCP (dhcp.conf)
    Le but est d'extraire des blocs de données.

    Exemple :
    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
     
    shared-network sharedTest {
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
     
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    }Fin subnet n°1
     
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost2 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost4 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }// Fin Subnet n°2
     
    }//Fin sharedNetwork
    Dans cet exemple je cherche a extraire les blocs subnets qui contiennent eux meme des blocs host.
    Je souhaite recupérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
     
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    }//Fin subnet n°1
    et :
    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
     
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
    host shHost2 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost4 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }// Fin Subnet n°2
    Pour cela je travaille avec les regEx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String regEx = "[\\s]*subnet\\s+.*\\s+[{][^{][^}]*[}]";
     
    Pattern modele0 = Pattern.compile(regEx);
    Matcher correspondanceRegex = modele0.matcher(blocSharedNetwork);
     
    while(correspondanceRegex.find()){
    String blocSubnet =correspondanceRegex.group();
     
    System.out.println(blocSubnet+"\n-----------");
    }
    Resultat du OUT :

    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
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
    -----------
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
    -----------
    Voila le problème, je ne recupere que le premier sous bloc host contenu dans le bloc subnet et pas l'ensemble des sous blocs host.
    Je pensais faire un compteur d'accolades pour récupérer la derniere accolade fermante mais je voulais savoir s'il nétait pas possible de gérer ca avec des expressions régulières directement.

  2. #2
    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
    L'expression régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String regex = "subnet.*\\{\\s*host\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\}\\s*\\}";
    semble marcher, après il est peut-être possible de l'optimiser.

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par le y@m's
    L'expression régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String regex = "subnet.*\\{\\s*host\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\}\\s*\\}";
    semble marcher, après il est peut-être possible de l'optimiser.
    Ok ca marche ce que tu as proposé mais le souci c'est qu'il peut y avoir dautre type de sous blocs dans mon subnet à savoir des sous blocs pool et zones en plus de host.

    Le truc c'est donc de bien récupérer l'intégralité de ce qu'il y a dans le bloc subnet, donc bien récupérer la dernière accolade fermante correspondant à l'accolade ouvrante du subnet.

    Exemple possible :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    shared-network sharedTest {
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ; 
    }
     
    pool {
     
      failover peer "dhcp";
      deny dynamic bootp clients;
      range 192.168.0.253 192.168.0.254;
     
     
      host srvmail {
        hardware ethernet AA:BB:CC:DD:EE:FF ;
       fixed-address 192.168.0.252 ;
      }
    }
    }//Fin Subnet n°1
     
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost33 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost333 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }//Fin Subnet n°2
    }//Fin Shared Network

  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
    Alors tu as deux solutions :

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par le y@m's
    Alors tu as deux solutions :
    1er probleme :
    Ok j'avais remplacé "host" par "\\w+" :
    Ca marche pour la zone.
    Mais le probleme c'est qu'un pool n'est pas formé de la même manière qu'une zone et qu'un host ( zone nomZone {} , host nomHost{} alors que pool -> pool {} )
    Ce probleme ets encore gérable en modifiant la regex.

    Le second probleme est par contre plus important car comme tu le vois dans l'exemple mon pool qui est contenu dans mon subnet contient lui meme (pool) un host ce qui n'est pas géré par notre regEx.

    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
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ; 
    }
     
    pool {
     
      failover peer "dhcp";
      deny dynamic bootp clients;
      range 192.168.0.253 192.168.0.254;
     
     
      host srvmail {
        hardware ethernet AA:BB:CC:DD:EE:FF ;
       fixed-address 192.168.0.252 ;
      }
    }
    }//Fin Subnet n°1

  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
    Je ne vois pas trop le problème. Si on traite le texte
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    shared-network sharedTest {
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ; 
    }
     
    pool {
     
      failover peer "dhcp";
      deny dynamic bootp clients;
      range 192.168.0.253 192.168.0.254;
     
     
      host srvmail {
        hardware ethernet AA:BB:CC:DD:EE:FF ;
       fixed-address 192.168.0.252 ;
      }
    }
    }//Fin Subnet n°1
     
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost33 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost333 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }//Fin Subnet n°2
    }//Fin Shared Network
    Avec l'expression régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String regex = "subnet.*\\{\\s*\\w+\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\}\\s*\\}";
    On ce retrouve avec 2 groupes "subnet" :
    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
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ; 
    }
     
    pool {
     
      failover peer "dhcp";
      deny dynamic bootp clients;
      range 192.168.0.253 192.168.0.254;
     
     
      host srvmail {
        hardware ethernet AA:BB:CC:DD:EE:FF ;
       fixed-address 192.168.0.252 ;
      }
    }
    }
    et
    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
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost33 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost333 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }
    ensuite tu peux travailler sur chaque "subnet" pour en sortir les "host", "zone" et "pool" et ensuite pour chaque "pool" extraire les "host".

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Non car comme tu vois si je rajoute un host apres mon pool:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    shared-network sharedTest {
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ; 
    }
     
    pool {
     
      failover peer "dhcp";
      deny dynamic bootp clients;
      range 192.168.0.253 192.168.0.254;
     
     
      host srvmail {
        hardware ethernet AA:BB:CC:DD:EE:FF ;
       fixed-address 192.168.0.252 ;
      }
    }
     
    host shHost3 {//HOST EN PLUS
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }//Fin Subnet n°1
     
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost33 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost333 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }//Fin Subnet n°2
    }//Fin Shared Network
    Resultat:
    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
    42
    43
    44
    45
    46
    47
    48
    49
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ;
    }
     
    pool {
     
    failover peer "dhcp";
    deny dynamic bootp clients;
    range 192.168.0.253 192.168.0.254;
     
     
    host srvmail {
    hardware ethernet AA:BB:CC:DD:EE:FF ;
    fixed-address 192.168.0.252 ;
    }
    }
    -----------
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost33 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost333 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }
    -----------
    Dans le resultat il ne trouve pas le host qui vient apres le pool mais qui est bien inclu dans le premier subnet.
    Celui la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    host shHost3 {//HOST EN PLUS
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
    C'est le seul probleme qui reste à traiter apres c'est du récursif et ce sera toujours pareil.

    J'apprécie ton aide.

  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 bizarre car chez moi ça marche bien, je récupère aussi le "shHost3" .
    Tu utilise bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String regex = "subnet.*\\{\\s*\\w+\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\}\\s*\\}";
    ?

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par le y@m's
    C'est bizarre car chez moi ça marche bien, je récupère aussi le "shHost3" .
    Tu utilise bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String regex = "subnet.*\\{\\s*\\w+\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\}\\s*\\}";
    ?
    Carrément j'ai fait un copier collé de mon bloc en entré et du resultat une fois qu'il passe à travers la regEx

  10. #10
    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
    Là je vois pas , car chez moi j'obtiens le résultat voulu. Poste ton code au cas où.

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Bon la je suis en cour en fait je fini dans 10 min je taff ce soir la dessus et je reviens à toi si le problème persiste. je peux te joindre par mail peut etre ?
    Dans tous les cas merci beaucoup pour l'aide.

  12. #12
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Voila 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
     
    LinkedHashMap<String,String> expressions = new LinkedHashMap<String,String>();
     
    expressions.put("subnet","subnet.*\\{\\s*\\w+\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\}\\s*\\}");//"[\\s]*subnet\\s+.*\\s+[{]{1}[^{]*[{]{1}[^}]*[}]{1}");
     
    Matcher correspondanceRegex;
    Set entrees = expressions.entrySet();
    Iterator iterator = entrees.iterator();
     
    while(iterator.hasNext()){
      Map.Entry entree = (Map.Entry) iterator.next();
      String regex = (String) entree.getValue();
     
      Pattern modele0 = Pattern.compile(regex);
      correspondanceRegex = modele0.matcher(blocSharedNetwork);
     
      while(correspondanceRegex.find()){
         if(entree.getKey().equals("subnet")){
          String blocSubnet = correspondanceRegex.group();
          System.out.println(blocSubnet+"\n-----------");
         }
       }
    }
    Voila fait pas attention aux hashMap et aux iterations car dans mon projet je boucle sur une hashMap de regEx

  13. #13
    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 spk4ever
    Je peux te joindre par mail peut etre ?
    Non, continue de passer par le forum :
    • En passant par le forum tu as une meilleure audience et donc plus de chance que quelqu'un trouve la solution (j'ai pas la science infuse, j'ai peut-être rater un truc ). Le temps probable de résolution de ton problème est donc moindre.
    • En passant par email (ou MP) tu te limite à une seule personne (en l'occurence moi) et si celle-ci se déconnecte (si si ça arrive ) alors tu n'auras plus personne pour t'aider.
    • Et puis si quelqu'un a le même problème (ou similaire) il sera surement content de voir ce sujet avec la solution (mais si on va la trouver ).
    Citation Envoyé par spk4ever
    Dans tous les cas merci beaucoup pour l'aide.
    De rien .

  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
    Bon, j'ai repris exactement ton code mis à part la variable blocSharedNetwork que j'ai remplacé par le texte :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    shared-network sharedTest {
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ; 
    }
     
    pool {
     
      failover peer "dhcp";
      deny dynamic bootp clients;
      range 192.168.0.253 192.168.0.254;
     
     
      host srvmail {
        hardware ethernet AA:BB:CC:DD:EE:FF ;
       fixed-address 192.168.0.252 ;
      }
    }
     
    host shHost3 {//HOST EN PLUS
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }//Fin Subnet n°1
     
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost33 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost333 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }//Fin Subnet n°2
    }//Fin Shared Network
    J'obtient en sortie :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ; 
    }
     
    pool {
     
      failover peer "dhcp";
      deny dynamic bootp clients;
      range 192.168.0.253 192.168.0.254;
     
     
      host srvmail {
        hardware ethernet AA:BB:CC:DD:EE:FF ;
       fixed-address 192.168.0.252 ;
      }
    }
     
    host shHost3 {//HOST EN PLUS
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }
    -----------
    subnet 192.168.8.0 netmask 255.255.255.0 {
     
     
    host shHost3 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost33 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    host shHost333 {
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }
    -----------
    Je récupère donc bien le host "shHost3" dans le premier subnet.
    C'est vraiment bizarre que cela ne marche pas chez toi .

    Vérifie bien ta sortie (des fois que tu es louché ).
    Supprime les .class générés puis recompile et réessaye (on sait jamais).

    Sinon, utilises-tu un IDE (si oui lequel) ou es-tu en ligne de commande ?
    Quel OS ? Quel version de java ?

  15. #15
    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 fait quelques tests et j'ai trouvé quelques problèmes avec mon expression régulière en rajoutant des tabulations dans le texte. J'ai donc corrigé l'expression régulière, regarde si ça change quelque chose chez toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String regex = "subnet.*\\{\\s*\\w+\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\s*\\}\\s*\\}";

  16. #16
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par le y@m's
    J'ai fait quelques tests et j'ai trouvé quelques problèmes avec mon expression régulière en rajoutant des tabulations dans le texte. J'ai donc corrigé l'expression régulière, regarde si ça change quelque chose chez toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String regex = "subnet.*\\{\\s*\\w+\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\s*\\}\\s*\\}";
    OK ca semble marcher, ne ferme pas le topic je fait des tests en modifiant le fichier de configuration je te tiens au courant.

  17. #17
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Ok ta dernière regEx semble marcher pour un maximum de 2 sous blocs imbriquer , dans mon cas le nombre maximum de sous blocs imbriqués est de 3.

    ca marche pour :
    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
     
    shared-network sharedTest {
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ;
    }
     
    pool {
     
    failover peer "dhcp";
    deny dynamic bootp clients;
    range 192.168.0.253 192.168.0.254;
     
     
    host srvmail {
    hardware ethernet AA:BB:CC:DD:EE:FF ;
    fixed-address 192.168.0.252 ;
    }
    }
     
    host shHost3 {//HOST EN PLUS
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }//Fin Subnet n°1
    Dans ce il ya que 2 sous blocs imbriqués pool et host:

    pool {

    failover peer "dhcp";
    deny dynamic bootp clients;
    range 192.168.0.253 192.168.0.254;


    host srvmail {
    hardware ethernet AA:BB:CCD:EE:FF ;
    fixed-address 192.168.0.252 ;
    }
    }

    Mon fichier de configuration peu prendre une couche suplémentaire d'imbrication, soit :

    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
     
    shared-network sharedTest {
     
    subnet 192.168.7.0 netmask 255.255.255.0 {
    host shHost1 {
    hardware ethernet 00:30:V6:S4:78:43;
    fixed-address 192.168.0.8;
    option host-name "fw2";
    }
     
    zone "0.168.192.in-addr.arpeeea" {
    primary 192.168.0.1;
    key "ma clef" ;
    }
     
    pool {
     
    failover peer "dhcp";
    deny dynamic bootp clients;
    range 192.168.0.253 192.168.0.254;
     
     
    host srvmail {
    hardware ethernet AA:BB:CC:DD:EE:FF ;
    fixed-address 192.168.0.252 ;
     
      host srvmailInterne{
        hardware ethernet AA:BB:CC:AD:EE:FF ;
        fixed-address 192.168.0.252 ;
      }
    }
    }//FIN POOL
     
    host shHost3 {//HOST EN PLUS
    hardware ethernet 00:30:V6:S4:78:44;
    fixed-address 192.168.0.7;
    option host-name "fw3";
    }
     
    }//Fin Subnet n°1
    Dans ce cas ca ne marche plus car la regEx ne descend pas plus bas que 2 couches.
    Ce bloc est en cocuhe 3:

    host srvmailInterne{
    hardware ethernet AA:BB:CC:AD:EE:FF ;
    fixed-address 192.168.0.252 ;
    }

    Peut tu me proposer une couche qui gere 3 couches et la se serait nickel.
    Merci par avance

  18. #18
    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
    Arf, c'est un jeu ou quoi ? Chaque fois que je réponds juste, je passe au niveau suivant et le problème deviens plus compliqué c'est ça ?

    Citation Envoyé par spk4ever
    Dans ce cas ca ne marche plus car la regEx ne descend pas plus bas que 2 couches.
    Ben, je viens de faire l'essai chez moi et ... ça marche .

    Expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String regex = "subnet.*\\{\\s*\\w+\\s*[^\\{\\}]*\\s*\\{(.*\\s?)*?\\s*\\}\\s*\\}";
    Avec le texte :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    shared-network sharedTest {
     
        subnet 192.168.7.0 netmask 255.255.255.0 {
     
            host shHost1 {
                hardware ethernet 00:30:V6:S4:78:43;
                fixed-address 192.168.0.8;
                option host-name "fw2";
            }
     
            zone "0.168.192.in-addr.arpeeea" {
                primary 192.168.0.1;
                key "ma clef" ;
            }
     
            pool {
                failover peer "dhcp";
                deny dynamic bootp clients;
                range 192.168.0.253 192.168.0.254;
     
                host srvmail {
                    hardware ethernet AA:BB:CC:DD:EE:FF ;
                    fixed-address 192.168.0.252 ;  
     
                    host srvmailInterne{
                        hardware ethernet AA:BB:CC:AD:EE:FF ;
                        fixed-address 192.168.0.252 ;
                    }
                }
            }//FIN POOL
     
            host shHost3 {//HOST EN PLUS
                hardware ethernet 00:30:V6:S4:78:44;
                fixed-address 192.168.0.7;
                option host-name "fw3";
            }
        }//Fin Subnet n°1
     
        subnet 192.168.8.0 netmask 255.255.255.0 {
            host shHost3 {
                hardware ethernet 00:30:V6:S4:78:44;
                fixed-address 192.168.0.7;
                option host-name "fw3";
            }
     
            host shHost33 {
                hardware ethernet 00:30:V6:S4:78:44;
                fixed-address 192.168.0.7;
                option host-name "fw3";
            }
     
            host shHost333 {
                hardware ethernet 00:30:V6:S4:78:44;
                fixed-address 192.168.0.7;
                option host-name "fw3";
            }
        }//Fin Subnet n°2
    }//Fin Shared Network
    j'obtiens la sortie :
    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
    42
    43
    44
    45
    46
    47
    48
    subnet 192.168.7.0 netmask 255.255.255.0 {
     
                    host shHost1 {
                            hardware ethernet 00:30:V6:S4:78:43;
                            fixed-address 192.168.0.8;
                            option host-name "fw2";
                    }
     
                    zone "0.168.192.in-addr.arpeeea" {
                            primary 192.168.0.1;
                            key "ma clef" ;
                    }
     
                    pool {
                            failover peer "dhcp";
                            deny dynamic bootp clients;
                            range 192.168.0.253 192.168.0.254;
     
                            host srvmail {
                                    hardware ethernet AA:BB:CC:DD:EE:FF ;
                                    fixed-address 192.168.0.252 ;  
     
                                    host srvmailInterne{
                                            hardware ethernet AA:BB:CC:AD:EE:FF ;
                                            fixed-address 192.168.0.252 ;
                                    }
                            }
    -----------
    subnet 192.168.8.0 netmask 255.255.255.0 {
                    host shHost3 {
                            hardware ethernet 00:30:V6:S4:78:44;
                            fixed-address 192.168.0.7;
                            option host-name "fw3";
                    }
     
                    host shHost33 {
                            hardware ethernet 00:30:V6:S4:78:44;
                            fixed-address 192.168.0.7;
                            option host-name "fw3";
                    }
     
                    host shHost333 {
                            hardware ethernet 00:30:V6:S4:78:44;
                            fixed-address 192.168.0.7;
                            option host-name "fw3";
                    }
            }
    -----------

  19. #19
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Non je te fait pas tourner en rond t'inquiètes mais je vois que tu gères vraiment bien les regEx et la je suis grace à toi à 2 doigts d'arriver à faire un touner un parseur fonctionnel pour mon application.

    Mais pour insister comme tu le remarques dans ton resultat il manque bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            host shHost3 {//HOST EN PLUS
                hardware ethernet 00:30:V6:S4:78:44;
                fixed-address 192.168.0.7;
                option host-name "fw3";
            }
    qui est bien dans le subnet n°1.

    Une fois ce dernier probleme trouvé c'est sur je ne reviendrai pas trainer ici tout de suite :-). Merci encore :-)

  20. #20
    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'avais pas fait gaffe au "shHost3", je croyais que c'était le "srvmailInterne" qui te manquait
    Je sais pas si j'aurais le temps de m'y mettre ce soir mais je vais me pencher sur le problème.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/05/2011, 23h50
  2. Réponses: 3
    Dernier message: 17/04/2011, 12h42
  3. expression régulière (Recherche dans fichier)
    Par Mirel dans le forum Langage
    Réponses: 4
    Dernier message: 16/04/2009, 15h13
  4. Expression régulière recherche de fichier
    Par david71 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/09/2008, 13h53
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 15h13

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