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

Java Discussion :

Parser une ligne suivant une expression réguliere


Sujet :

Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Parser une ligne suivant une expression réguliere
    Bonjour,
    J'ai besoin de votre aide. J'ai ceci (une ligne de fichier log sous format squid)
    1394950584.861 438 10.0.149.23 TCP_MISS/200 934 GET http://dzayfdqe.trwvksnpc.au/lsetyumxs.html - DIRECT/69.114.1.230 text/html
    je dois couper cette phrase en des champs suivant Une expression régulière
    SVP aider moi à écrire une expression régulière qui permet de parser cette ligne En fait j'ai pensé à fonction split mais la problème c que le nbre d'espace varie

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Si c'est simplement le nombre d'espaces qui varie entre tokens, tu peux simplement utiliser l'expression " +", soit "une espace, ou plusieurs".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Arrays.toString("a b    c d   e".split(" +")));
    affiche :

    [a, b, c, d, e]

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Bonjour en fait c pas juste les espaces mais de plus il existe le caractére - avant le champs DIRECT que je veux pas qu'il soit un champs à part entière

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Arrays.toString("1394950584.861 438 10.0.149.23 TCP_MISS/200 934 GET http://dzayfdqe.trwvksnpc.au/lsetyumxs.html - DIRECT/69.114.1.230 text/html".split(" - | +")));
    Résultat :
    1394950584.861, 438, 10.0.149.23, TCP_MISS/200, 934, GET, http://dzayfdqe.trwvksnpc.au/lsetyumxs.html, DIRECT/69.114.1.230, text/html]
    
    Si tu nous indiquais le résultat voulu, ça pourrait aider à te répondre de façon plus adéquate.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Salut joel.drigo
    merci beaucoup c gentil de votre part..
    en fait j'ai un fichier log voici un morceau
    1394950584.861 438 10.0.149.23 TCP_MISS/200 934 GET http://dzayfdqe.trwvksnpc.au/lsetyumxs.html - DIRECT/69.114.1.230 text/html
    1394950629.431 580 10.0.149.23 TCP_MISS/200 922 GET http://oacsyus.jxjsaz.tz/znvr.html - DIRECT/79.179.220.28 text/html
    1394950629.862 460 10.0.149.23 TCP_MISS/200 1860 GET http://jfgmbt.pfkaa.cat/ogwblsah.html - DIRECT/219.135.237.57 text/html
    1394950632.629 849 10.0.149.23 TCP_MISS/200 607 GET http://qpslzh.ngqde.construction/yhhbzllx.html - DIRECT/202.34.56.241 text/html
    1394950633.244 916 10.0.149.23 TCP_MISS/200 1651 GET http://psficabij.hklrmkfm.mv/vqjfld.html - DIRECT/154.252.249.81 text/html
    mon input sera ce fichier et le output voulu les différents champs constituants chaque ligne pour ensuite affecter chaque champs à un variable( noeud dans la base de donnée Neo4j) c comme il s'agit d'un import dans la base

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Moi je dis, si tu veux pas le - tu as qu'à faire comme s'il était pas là.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    La regexp que je t'ai donnée devrait fonctionner (à moins que l'espace ne soit pas échappé dans l'une des urls, ce qui, normalement, ne devrait pas arriver). Après, lorsque le parsing devient un peu plus compliqué qu'une tokenisation simple, je préfère utiliser un algo de parsing à base d'analyse de la chaîne, avec des règles (en itérant sur les caractères de la chaînes), c'est souvent bien plus simple.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Moi je dis, si tu veux pas le - tu as qu'à faire comme s'il était pas là.
    Oui, aussi, on peut l'ignorer dans le résultat du split.

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    en fait j'ai réussi à écrire l'expression régulière qui décrit chaque ligne ma problème c'est comment faire l'input de ce fichier à l'aide de java et ensuite comment faire le découpage de chaque ligne du fichier en des champs suivant cette règle.
    la règle est cella la
    ([0-9]{10})(.[0-9]{3})( +)([0-9]+)( +)([0-9]\\d{0,2}\\.){3}[0-9]\\d{0,2}( +)([A-Z]+)(_[A-Z]+)(/[0-9]+)( +)([0-9]+)( +)(GET)( +)(http://)([a-z]+)(.[a-z]+)(.[a-z]+)(/[a-z]+)(.html)( +)(-)( +)([A-Z]+)(/([0-9]\\d{0,2}\\.){3}[0-9]\\d{0,2})( +)([a-z]+)(/html)
    SVP aidez moi

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Tu veux de l'aide ? En voici : jette cette abomination et arrange-toi pour ne plus jamais la revoir.

    Remplace par un parseur programmé par tes soins (avec pas ou peu de regex) et qui explique très clairement comment il sépare la ligne en champs. Tu te seras énormément rapproché de ton but.

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Thelvin
    j'ai pas compris quesque vous voulez dire et merci en tout cas

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Citation Envoyé par houba91 Voir le message
    j'ai pas compris quesque vous voulez dire et merci en tout cas
    Jette cette regex, oublie les regex, fais comme si les regex ça existe pas.

    Les choses deviendront subitement incroyablement plus simples.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Recupere une info suivant une ligne dans un texte.
    Par cyrilthebest8 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/12/2006, 18h04
  5. Réponses: 8
    Dernier message: 20/06/2005, 15h10

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