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 Perl Discussion :

Expressions réguliére filtrer fichier dns


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut Expressions réguliére filtrer fichier dns
    Bonjours a tous.
    Mon objectif et d'extraire les adresse et nom de reseaux conetnue dans un fichier dns.
    J'utilise donc des expressions régulière mais cela fait 3 semaine au plus que j'ais découvert le perl et j'ais beaucoup de mal avec la syntaxe de ces expression(je ne suis pas un bébé unix )

    Voici un exemple de ligne que j'aimerais bien traiter :

    ;*** 172.21.X.X reseau1
    ;*** 172.21.250.0 wifi1

    Voici mon code pour filtrer le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #si la ligne est du type : '<;***---2espaces ou plus---chaîne de caractére---1 a 4 espaces-chaines de caractére>
    if($lines =~ /[;***]+\s{2,}+[a-zA-Z0-9]+\s{1,4}+[a-zA-Z0-9]/)
    Je veut ensuite mettre les deux chaines adresse et nom de reseau dans un fichier et séparer les deux par un ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #on retire les espaces et les ;*** et on remplace l'espace entre les chaînes de caractére par ;
    $lines=~ /[a-zA-Z0-9^;]+[;]+[a-zA-Z0-9]/g;
    A l'execution j'ai droit a un :
    Nested quantifiers in regex; marked by <-- HERE in m/[;***]+\s{2,}+ <-- HERE [a-zA-Z0-9^;]+\s{1,4}+[a-zA-Z0-9^;]/ at DNS_Analyser.network.pl line 12.

    Merci d'avance !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Il y a des caracteres spéciaux que tu dois proteger, je n'ai pas la liste en tete, mais les caracteres * \ ( ) {} doivent etre proteger.

    Tu pourrais faire quelque chose comme ca ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
         # Tu cherches ; suivi de 3 étoiles, suivi 1 ou plus d'espace, tu mémorises l'adresse ip, suivi d'un espace suivi du réseau.
     
          if($lines =~ /;\*\*\*\s+(.+)\s(.+)/ )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Merci de la rapidité de ta reponse.
    Tout d'abord ta proposition fonctionne correctement
    A l'execution le filtrage a l'aire d ebien se faire mais j'ais encore l'écriture ds le fichier a résoudre. Je souhaite supprimer l'espace entre les 2 chaines pour le remplacer par un ;
    je pensait mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $lines=~ /(.+)\;(.+)/;
    Sinon pourrait tu me précier ce que signifit " (.+) " dans l'expression réguliére ?
    Cela corespond a une chaine de caractére ? au même titre que [a-zA-Z0-9] ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Points : 70
    Points
    70
    Par défaut
    Le . dans l'expression (.+) cela signifie cherche un caractere quelconque 1 fois ou plus.

    Le point ce n'est pas tout à fait comme \w ou [0-9a-zA-Z] car w c'est pour word en anglais, alors que le point peut cherche des caracteres quelconque qui inclure aussi les caracteres [0-9a-zA-Z].

    Pour le mettre dans un fichier il faut que tu fasses un open sur un handle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    open(FIC,">fichier.txt") or die "Erreur d'ouverture fichier" ;
     
    print (FIC "$adresse;$nom" ) ; 
     
    close (FIC) ;
    Tu devrais quand meme lire les cours et FAQ avant.

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu sembles faire un grand nombre de confusions et d'approximations... Tu utilises des classes de caractères ( '[]' ) là où tu devrais utiliser des litérals, tu sembles utiliser un match regex là où tu veux faire une substitution... Tu protèges des caractères qui n'ont pas lieu de l'être (par exemple ';')...

    Grosso-modo, ce que tu veux faire est probablement, de ce que j'en ai compris :
    Code Perl : Sélectionner tout - Visualiser dans une fenêtre à part
    $line =~ s/^;\*{3}\s+([\w\.]+)\s+(\w+)\s*$/$1;$2/;

    Mais essaie vraiment de relire ton cours, ou la FAQ pour t'éclaircir les idées.

    --
    Jedaï

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Merci pour ces reponses.
    J'ais apprit le perl sur le tas seul j'ais lu divers cours sur in ternet mais je n'ais pas réussi a comprendre le fonctionement des expressions avec les cours que j'avais trouvé.
    En tout cas vos expliquation et exemple m'ont bien éclaircit les idées en les complétant avec une lecture de la FAQ j'aurais comprit.

    Merci d'avoir prit le temp d'expliquer ca aun débutant.

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

Discussions similaires

  1. Expression régulière : filtrer tout sauf un expression
    Par thomine dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 23/07/2010, 08h14
  2. [RegEx] Expression régulière sur fichier SQL
    Par dermenji dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2009, 19h17
  3. Réponses: 22
    Dernier message: 05/09/2006, 19h32
  4. [RegEx] Expression régulière - Lien fichier
    Par Lung dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2006, 15h54
  5. Expression régulière pour récupérer le nom d'un fichier
    Par calimero2611 dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2006, 19h00

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