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 :

[Java] Problème de Regex


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Par défaut [Java] Problème de Regex
    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;
     
    }

  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 : 42
    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
    Par défaut
    Citation Envoyé par spk4ever
    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.
    Citation Envoyé par spk4ever
    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.
    C'est plutôt ennuyeux ça parce que sinon en remplaçant le \s+ par \s*, il te reste juste à faire un trim() sur la chaîne contenant l'IP pour éliminer les éventuels espaces supplémentaires au début. [EDIT]Je viens de voir qu'en fait ça revient à faire ta première expression régulière [/EDIT]
    Tu n'as vraiment aucune possibilité de toucher au code ? parce que sinon je vois pas trop comment faire.

    Quelques remarques :
    • Pour l'IP, il serait plus juste d'utiliser \d que \w.
    • Est-ce normal que les . ne soit pas échappés ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 58
    Par défaut
    Merci pour ta réponse.
    Pour les problèmes que tu soulèves, ça marche comme ça sans échapper les points mais il est vrai que ça ne parait pas normal.
    Par ailleurs, on ne met pas \s* car ça sélectionnerait aussi "-mask" dans la ligne "subnet-mask 255.255.255.0" qui se trouve aussi dans la sélection de base ce qui ferait planter le reste du traitement car cette chaine ne correspond pas.
    Si quelqu'un a une solution, je suis toujours preneur, merci pour les conseils par ailleurs.

  4. #4
    Membre expérimenté Avatar de petitpasdelune
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 221
    Par défaut
    Quel API de regexp utilises-tu ?
    [EDIT]
    \s* ne passe pas c'est sûr, mais as-tu esayé : [\s]* ou [\s]{0,}
    (je ne sais pas si ton API est capable de comprendre cette notation)
    [/EDIT]

    PPDL.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour,

    Voici une solution alternative qui semble fonctionner. Voir les résultats obtenus en fin de listing.

    Nicolas

    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
    // Nicolas_75, 28 août 2006
    // http://www.developpez.net/forums/showthread.php?t=198069
    // appeler le fichier TestRegexSubnet.java
     
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
    public class TestRegexSubnet {
     
        public static void main(String[] args) {
     
            Pattern pattern = Pattern.compile("subnet(\\s+)(\\w{1,3}.\\w{1,3}.\\w{1,3}.\\w{1,3})");
            // dans ce cas, l'adresse IP est récupérée par myMatcher.group(2);
     
            Matcher m;
            String toBeTested;
     
            toBeTested = "subnet 192.168.0.0 netmask 255.255.255.0";
            m = pattern.matcher(toBeTested);
            if (m.find()) {
                System.out.println(toBeTested+" => >"+m.group(2)+"<");
            }
            else {
                System.out.println(toBeTested+" => pas d'occurrence trouvée");
            }
     
            toBeTested = "option subnet-mask 255.255.255.0";
            m = pattern.matcher(toBeTested);
            if (m.find()) {
                System.out.println(toBeTested+" => >"+m.group(2)+"<");
            }
            else {
                System.out.println(toBeTested+" => pas d'occurrence trouvée");
            }
        }
    }
     
    // RESULTAT :
    // subnet 192.168.0.0 netmask 255.255.255.0 => >192.168.0.0<
    // option subnet-mask 255.255.255.0 => pas d'occurrence trouvée

Discussions similaires

  1. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  2. [Java] Problème ClassPath
    Par nsanabi dans le forum Jasper
    Réponses: 8
    Dernier message: 02/11/2005, 18h44
  3. [JAVA] Problème supression noeud d'un document XML
    Par vero59 dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/08/2005, 16h12
  4. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26
  5. [Eclipse][Java]Problème de compilation sur CTRL+S
    Par ZeKiD dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 27/05/2004, 11h49

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