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 :

pb de regexp


Sujet :

Langage Perl

  1. #1
    Membre habitué Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut pb de regexp
    Bonjour

    j'ai un probleme, je dois splitter par les espaces, une chaine de caractères issue d'un fichier

    Problème les espaces à prendre en compte sont ceux qui ne sont pas contenu entre des guillemets doubles (")

    exemple de ligne à traiter
    $ligne = 0126878 "mon nom" "mon_nom_sans_espace" 12356 "a b c d e" "f g h i j"

    après le split dans @var le resultat devrait être
    $var[0] = 0126878
    $var[1] = "mon nom"
    $var[2] = "mon_nom_sans_espace"
    $var[3] = 12356
    $var[4] = "a b c d e"
    $var[5] = "f g h i j"

    j'ai essayé plein de truc mais je n'y arrive pas

    y aurait-il une bonne âme ici qui pourrait me trouver la regexp capable de faire ça

    merci
    Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
    L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un

  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
    Là tu es à la limite de ce qui est faisable avec des regexs... Tu ne spécifie pas comment mettre des " à l'intérieur des "", donc je vais supposer que c'est impossible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @var = ($ligne =~ m/("[^"]+"|\S+)/g);
    --
    Jedaï

  3. #3
    Membre habitué Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    Citation Envoyé par Jedai
    Là tu es à la limite de ce qui est faisable avec des regexs... Tu ne spécifie pas comment mettre des " à l'intérieur des "", donc je vais supposer que c'est impossible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @var = ($ligne = m/("[^"]+"|\S+)/g);
    Merci beaucoup déjà d'avoir pris le temps de répondre
    mais ta solution marche après une petite correction
    après moultes essais, j'ai enfin compris qu'il fallait lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my @var = ($ligne =~ m/("[^"]+"|\S+)/g);
    pour mon info en gros de ce que j'ai compris de ta syntaxe:
    tu recherches un guillemet suivi de tout caractere sauf le guillemet = "[^"]
    ceci pouvant être reproduit au moins 1 fois (le +)
    suivit d'un guillemet "
    donc en gros tu trouves les chaines "xxxxxx" mais aussi les " " non ?
    ensuite c'est la regexp précédente ou tout sauf un espace |\S+

    j'ai un problème, je suis super content que ça marche mais j'aimerais être sur d'avoir compris

    si tu avais encore 5mn pour vérifier que j'ai bien compris ta syntaxe ça serait top !

    merci encore
    Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
    L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Autre possibilité : remplacer la chaîne te servant de séparateur par une autre chaîne que tu es sûr de ne jamais trouver dans tes lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ligne = "0126878 \"mon nom\" \"mon_nom_sans_espace\" 12356 \"a b c d e\" \"f g h i j\";
     
    $ligne =~ s/" /£/g;
    $ligne =~ s/ "/£/g;
     
    @var = split(/£/, $ligne);
    Une autre manière de faire

  5. #5
    Membre habitué Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    Citation Envoyé par Arioch
    Autre possibilité : remplacer la chaîne te servant de séparateur par une autre chaîne que tu es sûr de ne jamais trouver dans tes lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ligne = "0126878 \"mon nom\" \"mon_nom_sans_espace\" 12356 \"a b c d e\" \"f g h i j\";
     
    $ligne =~ s/" /£/g;
    $ligne =~ s/ "/£/g;
     
    @var = split(/£/, $ligne);
    Une autre manière de faire
    sauf que si 2 variables numérique se suive je n'ai pas de séparateur !!
    exemple si ligne =
    12345 65898 "abcde" 123456 456789 "fghijk"

    donc je garde la solution de jedai qui gère tout ça ! ;-)
    Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
    L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par rcageot
    donc je garde la solution de jedai qui gère tout ça ! ;-)
    Et zut, Jedai a encore gagné !!

  7. #7
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Laissez tomber Arioch, il gagne presque à tous les coups

    @rcageot : je confirme que tu as bien compris la regex de Jedai au fait, comme je ne suis pas sûr qu'il le fasse lui même
    Et effectivement, une chaîne de type " " sera matchée.
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

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

Discussions similaires

  1. Vérification de formulaire avec regexp
    Par Shadow aok dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/08/2007, 11h57
  2. [langage] [RegExp] Détecter un chemin Windows
    Par GLDavid dans le forum Langage
    Réponses: 3
    Dernier message: 01/09/2004, 14h57
  3. [langage] [RegExp] Récupérer une portion de phrase
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 27/08/2004, 22h01
  4. [langage] [RegExp] Question d'expression régulière
    Par cloogy dans le forum Langage
    Réponses: 5
    Dernier message: 08/10/2003, 09h29
  5. regexp
    Par mathieu gérard dans le forum ASP
    Réponses: 4
    Dernier message: 02/10/2003, 18h05

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