Bonjour je travaille sur le parseur d'un fichier DHCP (dhcp.conf)
Le but est d'extraire des blocs de données.
Exemple :
Dans cet exemple je cherche a extraire les blocs subnets qui contiennent eux meme des blocs host.
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
Je souhaite recupérer :
et :
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
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
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
Resultat du OUT :
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-----------"); }
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.
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"; } -----------
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.
Partager