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 :

Expression reguliere encore et tojours


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut Expression reguliere encore et tojours
    Bonjour a tous qq un pourrais me dire comment je peut extraire tout ce qui est contenu en gras dans le fichier ci dessous ?
    j'ai une expression reguliere mais elle ne matche pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     if( ($Ligne_Fichier) =~/(\[\S.*?)\[\S/)
    [groupe] blabllaalmanlal
    blbablihophjfzoejo aefjoopazejfopzej
    fzezehjfilzeh l ihzleih lihlih

    [groupe1] blelabelablablbl [/code][/b]

  2. #2
    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
    Ok... En fait tu essaies de travailler ligne par ligne tout en matchant sur plusieurs lignes... C'est pas possible.
    Donc soit tu travailles sur le fichier entier, et là cette regex pourra effectivement matcher, soit tu fais un tout petit automate pour faire l'équivalent en travaillant ligne par ligne.
    Je te recommanderais plutôt la seconde solution, même si elle est un peu plus compliquée, parce qu'elle est plus robuste.

    --
    Jedaï

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    Mais alors serait il possible de convertir le fichier que j ai en une seule ligne en supprimant juste les saut de ligne ?
    Jules

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    Merci JEDAI pour ton aide mais la je seche a nouveau sur un probleme !!!
    Tu m'a dit que l'on ne pouvait pas matcher sur plusieurs lignes alors je me suis dit pas de soucy je vais transformer mon fichier contenant pleins de lignes en une seule ligne avec une expression reguliere qui remplace les saut de ligen par rien. Mais le probleme vient apres car je n arrive pas verifier l'expression reguliere qui suit et la je ne comprend pas pourquoi !!

    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
    #!/usr/bin/perl
                                              #Utilisation du module POSIX pour recuperer l'heure
                                              #car ce module gère les variables d'environnement
    use POSIX qw(strftime);                   #strftime est un sous programme du module POSIX qui retourne des listes
    use strict;
    my $Ligne_Fichier;
    my $cpt=0;
    my $Addr_Ip;
    my $cpt2=0;
    #Variables globales utilisées par le programme
    # Vérification et ouverture du fichier base_Lan.txt pour la lecture
    open(Fichier_Lan,"< base_Lan_perso") || die ("Vérifiez la présence du fichier base_Lan.txt ou son chemin à la ligne :\n $! ");
            while ($Ligne_Fichier = <Fichier_Lan> )
            {
                    next if ($Ligne_Fichier =~ m/^$/);
                    {
                        if ($Ligne_Fichier=~s/\n//g)
                            {
                            $cpt++;
    ###############################################
                                   [b] if( ($Ligne_Fichier) =~/(\[.*?)\[/)[/b] 
                                    {$cpt2++;
    #############################################"
                                            if ( ($Addr_Ip)= (($Ligne_Fichier) =~/\S+\t+(\d+\.\d+\.\d+\.\d+)/sgx))
                                            # expression reguliere qui permet de trouver l'@IP de chaque witch
                                            {
                                                    print (" Adresse IP: [$Addr_Ip]");
                                            }
                                    }
                            }
                    }
            }
    print("Nombre de lignes $cpt \n");
    print("Nombre de groupes $cpt2 \n");
    close Fichier_Lan;
    J'ai tendance a penser que l'expression reguliere qui n est pas verifiee (celle qui est en GRAS) ne scrute pas la ligne qui correspond au fichier !!!
    Je capte plus snif snif. Est ce l'expression qui est mauvaise ou la variable qu'elle consulte ???

    Merci d'un coup de pouce Jules

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    Bon apres avoir avance un peu, je suis sur que ca couine au niveau de la recuperation de la ligne unique apèrs avoir transcrit toutes les lignes d'un fichier en une seule :!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if (($essai)=(($Ligne_Fichier)=~s/\n//g))
                            {
                            $cpt++;
                            print("$essai");
    Comment etre sur que je recupere la ligne unique ? Le probleme c'est que je ne peux pas mettre de parenthese dans cette regex sinon je recupererait que du vide !!!
    Merci d'avance Jules

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

Discussions similaires

  1. expression reguliere (encore)
    Par nkdb dans le forum Langage
    Réponses: 4
    Dernier message: 29/05/2006, 15h59
  2. [langage] expression reguliere encore.
    Par lilith dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2005, 15h33
  3. Réponses: 7
    Dernier message: 16/07/2004, 13h24
  4. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 17h06
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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