Bonjour,
Je parse un fichier de configuration pour DHCP avec des expressions régulières et je suis actuellement confronté à un problème.
J'arrive à récupérer le bloc subnet figurant en bas du post mais je voudrais, dans ce bloc, récupérer l'IP correspondante à la directive "subnet" (celle qui suit le mot subnet et uniquement celle là).

Pour l'instant, j'utilise l'expression régulière suivante :
(?<=subnet)\\s+\\w{1,3}.\\w{1,3}.\\w{1,3}.\\w{1,3}

Qui me renvoie :
or cette IP contient un espace en début de chaîne, ce qui n'est pas bon.

S'il y a un seul espace, afin d'être sûr d'obtenir l'IP sans espaces, je peux rajouter :
(?<=subnet\\s)\\s+\\w{1,3}.\\w{1,3}.\\w{1,3}.\\w{1,3}
Mais c'est une méthode très statique qui ne trouve plus la chaine s'il y a plus d'un espace.

En revanche, s'il y a plus d'un espace (imaginons 5 espaces suite à une erreur de saisie), il m'est impossible d'imaginer une expression régulière convenable et qui s'adapte en fonction du fait qu'il puisse y avoir 1 ou 1000 espaces entre subnet et l'IP.

Si quelqu'un a plus d'imagination que moi, je l'invite à m'en faire part avec grand intérêt.

PS : Je précise qu'à cause de l'architecture, il est impossible d'envisager un retraitement de la chaine par un split ou un replace par exemple.

Merci beaucoup.


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.0.0 netmask 255.255.255.0 {
 
# Nom de votre domaine pour cette zone.
option domain-name "alex.fr";
 
# Information sur votre réseau.
option routers 192.168.0.8;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
 
# Plages d'adresses couvertes par DHCP.
range 192.168.0.20 192.168.0.250;
default-lease-time 21600;
max-lease-time 43200;
 
}