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

Linux Discussion :

Problème d'extraction de regexp


Sujet :

Linux

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Points : 45
    Points
    45
    Par défaut Problème d'extraction de regexp
    Bonjour à tous !

    Je rencontre un souci d'extraction d'URL, je dois extraire l'URL de:

    J'utilise Ruby pour celà (cependant je peux utiliser un autre langage):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ruby -ne 'if $_=~ /url(\'([^\"]+)\'/;puts $1;end' < file
    Cependant celà me donne:

    je n'arrive pas à enlever les singles quotes

    merci d'avance !
    RedVivi

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Hmm, je ne fais pas de Ruby, mais, ne devrais tu pas proteger la première parenthèse ? car là, il doit se dire que $1 commence ici non ?

    Test pour voir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ruby -ne 'if $_=~ /url\(\'([^\"]+)\'/;puts $1;end' < file

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Points : 45
    Points
    45
    Par défaut
    Malheureusement non, ça ne fonctionne pas, j'essaye de voir en perl mais c'est galère aussi

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Points : 45
    Points
    45
    Par défaut
    Finalement c'est le drame, j'en suis toujours au même point, j'arrive juste à matcher ce qu'il y a après "url" jusqu'à la parenthèse finale mais ces single quotes m'embetent toujours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .*url match jusqu'à "url"
     
    ).*$ match jusqu'à la parenthèse
    Peut être que le ruby n'est pas pour moi

  5. #5
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Ça le fait avec awk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "url('/blabla/foo.bar')" | awk -F"'" '{print $2}'

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par BlaireauOne Voir le message
    Ça le fait avec awk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "url('/blabla/foo.bar')" | awk -F"'" '{print $2}'
    Ha oui bien super !Ca marche merci ! Mais c'est normal que j'ai plein de retour à la ligne et mon match au milieu de tout ça ???

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Citation Envoyé par redvivi Voir le message
    Ha oui bien super !Ca marche merci ! Mais c'est normal que j'ai plein de retour à la ligne et mon match au milieu de tout ça ???
    Cela dépend uniquement de ce que tu donnes en entrée ! Si ton entrée est exactement celle ci-dessus, alors non, ce n'est pas normal. Si en revanche il s'agit ici d'un extrait d'une ligne d'un fichier, alors c'est que cette solution n'est pas la solution complète, et qu'il faut la coupler à autre chose (par exemple grep).

    Donnes nous un exemple présentant tous les cas pouvant se présenter, et on verra ce qu'on peut faire.

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Points : 45
    Points
    45
    Par défaut
    Non c'est ok, un petit coup de grep pour extraire la ligne et c'est bon !

    Par contre, un autre problème se pose à moi, voici les cas que je peux rencontrer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    url('/foo.bar/bla')
    url("/foo.bar/bla")
    url(/foo.bar/bla)
    Pour marcher les 2 premiers, pas de souci, mais le 3eme c'est compliqué, car si j'utilise seulement les parenthèse pour matcher, je vais me retrouver avec soit "http://foo.bar" soit 'http://foo.bar', à moins que de détecter que les alphanumériques mais reste le problème du "/"...je vois pas trop comment faire là

  9. #9
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    En déclarant comme séparateurs de champs les caractères ", ', ( et )
    http://lea-linux.org/cached/index/Dev-awk.html
    http://www.shellunix.com/awk.html
    http://www.delorie.com/gnu/docs/gawk/gawk_46.html

    Version "aérée" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    awk -F"[\"'()]" '
    {
        if ($2 == "") {
            print $3
        } else {
            print $2
        }
    } ' test.txt

    Version compacte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -F"[\"'()]" ' { if ($2 == "") { print $3 } else { print $2 } } ' test.txt

    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /foo.bar/bla
    /foo.bar/bla
    /foo.bar/bla
    /foo.bar/bla
    /foo.bar/bla
    /foo.bar/bla

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Points : 45
    Points
    45
    Par défaut
    Si j'ai bien compris tu as fait en une ligne tout ce qu'il faut pour isoler les 3 types d'expressions !? Alors là, merci et chapeau bas

Discussions similaires

  1. [MySQL] Problème d'extraction de données d'un tableau
    Par cyberdevelopment dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/04/2007, 14h11
  2. [XML][tinyXML] Problême d'extraction de données XML ac tinyxml
    Par Jahprend dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 19/03/2007, 10h35
  3. problème d'extraction de données html
    Par spootnic22 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 01/11/2006, 14h24
  4. [RegEx] Problème sur chaîne et regexp
    Par Kerod dans le forum Langage
    Réponses: 7
    Dernier message: 22/04/2006, 17h05
  5. Problème d'extraction d'un fichier zip
    Par njely dans le forum Langage
    Réponses: 4
    Dernier message: 24/05/2005, 23h36

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