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 :

Problème sur regexp


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut Problème sur regexp
    Plop all,

    Je fais actuellement mon programme "parseur de log".

    Il ne me reste plus qu'à optimiser mes expressions régulières.

    Deux formats d'expression : Apache et IIS

    Voici un exemple de log pour ces deux formats :

    Apache
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    192.90.90.90 - - [10/Aug/2009:19:45:42 +0100] "GET /index.php HTTP/1.1" 100 200 "http://www.developpez.com" "Mozilla/4.0 (compatible; MSIE 7.0; Windows)"
    IIS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2008-01-05 10:10:10 192.90.90.91 - GET /index.php 200 133 - Mozilla /4.0 (compatible; MSIE 7.0; Windows) http://www.developpez.com/
    J'ai actuellement un problèmes sur mes expressions que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $APACHE  = q{(\S+)\s+\S+\s+\S+\s+\[(\d+)/(\D+)/(\d+):\d+:\d+:\d+\s+\+\d+\]\s+\"(\S+)\s+(\S+)\s+\"\s+(\S+)\s+(\S+)\s+\"(.*)\"\s+\"(.*)\"};
    my $IIS = q{(\d+)-(\d+)-(\d+)\s+\d+:\d+:\d+\s+(\S+)\s+\S+\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+\S+\s+(\S+)\s+(\S+)};
    Premier problème, je crois qu'il doit y avoir une erreur dans la ligne apache et je ne vois pas ou.

    Au niveau de le ligne IIS, je ne vois pas comment récupérer Mozilla /4.0 (compatible; MSIE 7.0; Windows) et http://www.developpez.com/ sachant qu'il n'y a pas de quote ici et qu'il y a plusieurs espaces dans le user agent (Mozilla 4.0 etc...).

    Avez-vous une idée comment procéder ?

    Je pense que je vais devoir me servir de ^http mais cela aurait pu être www.

    Merci à vous

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    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
    #!/usr/local/bin/perl
     
     
    use strict;
    use warnings;
     
     
     
    my $apache = q{192.90.90.90 - - [10/Aug/2009:19:45:42 +0100] "GET /index.php HTTP/1.1" 100 200 "http://www.developpez.com" "Mozilla/4.0 (compatible; MSIE 7.0; Windows)"};
    my $iis = q{2008-01-05 10:10:10 192.90.90.91 - GET /index.php 200 133 - Mozilla /4.0 (compatible; MSIE 7.0; Windows) http://www.developpez.com/};
     
     
    if ( $apache =~ m{([\d.]+)[-\s]+\[(\w+)/(\w+)/(\d+)[\d:]+\s\+\d+\] "([A-Z]+) /(.*)" (\d+) (\d+) "(.*)" "(.*)"}){
     
    	my ($ip, $jour, $mois, $annee, $method, $page, $ret_code, $byte, $referer, $user_a) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);
    	print "ip = $ip\njour = $jour\nmois = $mois\nannée = $annee\nmeth = $method\npage = $page\ncode = $ret_code\nby = $byte\nref = $referer\nuser = $user_a\n\n\n";
    }
     
     
     
    if ( $iis =~ m{(\d+)-(\d+)-(\d+)\s[\d:]+\s([\d.]+)\s-\s([A-Z]+)\s/(.*)\s(\d+)\s(\d+)\s-\s(.*)\s(\S*)}){
     
    	my ($annee, $mois, $jour, $ip, $method, $page, $ret_code, $byte, $referer, $user_a) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);		
    	print "ip = $ip\njour = $jour\nmois = $mois\nannée = $annee\nmeth = $method\npage = $page\ncode = $ret_code\nby = $byte\nref = $referer\nuser = $user_a\n\n\n";
    }
    Je pense que je vais devoir me servir de ^http mais cela aurait pu être www.
    je pense qu'une adresse ne peut pas avoir d'espaces, utilise \S* sinon

  3. #3
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Tu peux évidemment remplacer les \s par de simples espaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $iis =~ m{(\d+)-(\d+)-(\d+) [\d:]+ ([\d.]+) - ([A-Z]+) /(.*) (\d+) (\d+) - (.*) ((?:http://)?www.*)})

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    Nickel comme toujours !

    Je test cela ce soir pour pas changer loool

    Merci beaucoup.

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

Discussions similaires

  1. [RegEx] Problème sur chaîne et regexp
    Par Kerod dans le forum Langage
    Réponses: 7
    Dernier message: 22/04/2006, 16h05
  2. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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