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 :

[langage] Expressions rationnelles (perl/C)


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut [langage] Expressions rationnelles (perl/C)
    Bonjour,
    J'ai écrit une expression rationnelle pour récupérer /dossier/fichier.html dans la chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <frame src=/dossier/fichier.html ...>
    En perl, ca marche avec la regex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame[^>]*[ \n\r]*src[ \n\r]*=[ \n\r]*[\"\']*([^?;\)\'\"\n\r> ]+)[?;\)\'\"\n\r> ]
    Mais je voudrais traduire cette expression pour la rendre possible avec la bibliothèque regex.h en C/C++.
    Est-ce que vous connaissez un moyen pour le faire car, je n'y arrive pas.

    Si je ne dois pas poster ici mais dans le forum C, dites-le moi mais je crois que les plus grands specialistes de regex sont dans ce forum!

    Merci!

    Matthieu

  2. #2
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Je ne connais pas la libraire regex.h, peux tu me dire pourquoi ca ne fonctionne pas ? Mici.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    En fait, je ne sais pas pourquoi ca ne marche pas.
    Pour être plus précis, ca ne matche pas et je ne comprends pas pourquoi. Je me suis dit qu'il devait y avoir des différences dans l'écritures des patterns mais je ne vois pas le problème. Je ne sais pas trop en fait ce qui se passe.

    Est-ce que quelqu'un connaît un moyen pour passer facilement de perl à C avec les regex?

    Merci pour ton aide Choupi!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Bon je viens d'essayer de refaire une regex progressivement et j'ai construit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame[^>]*[ \n\r\t]*src[ \n\r\t]*=[ \n\r\t\"']*([^?;)>\n\r\t\"' ]+)[ \n\r\t]*[?;)>\n\r\t\"' ]
    Je ne vois pas trop la différence mais elle marche!!!

    Est-ce que quelqu'un peut me dire la différence? Est-ce qu'on peut l'améliorer (des choses en trop dans les derniers blocs...) ?

    Merci pour votre aide!

    Matthieu

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    Salut
    J'ai réalisé un programme en Perl qui fait ce que tu demandes :
    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
     
    $var="<frame src=/dossier/fichier.html target=self>";
     
    if ($var=~/<frame\s+(.*)\>/) # Si frame possèdes attributs
    {
    @tab=split/\s+/,$1; 
     
    foreach(@tab)
    {
    ~/(.+)=(.+)/;
    $param{$1}=$2;
    }
     
    foreach $key (sort keys %param)
    {print "$key : $param{$key}\n";}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    E:\home>perl test.pl
    src : /dossier/fichier.html
    target : self
    Celui ci doit etre facilement adaptable en C. Si tu ne comprends pas quelque chose préviens moi.

  6. #6
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Citation Envoyé par KORTA
    J'ai réalisé un programme en Perl qui fait ce que tu demandes
    C'etait pas la question. Il veut juste une regex a utiliser avec regex.h en C.

    Je trouve pas les limitations de regex.h ... Un site ou on peut avoir ca ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par Choupi
    Citation Envoyé par KORTA
    J'ai réalisé un programme en Perl qui fait ce que tu demandes
    C'etait pas la question. Il veut juste une regex a utiliser avec regex.h en C.

    Je trouve pas les limitations de regex.h ... Un site ou on peut avoir ca ?
    C'est vrai mais si tu regardes bien le pattern matching tu l'as dans mon programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <frame\s+.*src=([^\s]+).*\>
    Mais le programme que j'ai fait est plus complet car il prend compte de tout les attributs, ce matching ne fait correspondre que l'attribut src.

  8. #8
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <frame\s+(\s*(.+)=(.+)\s+)+\>
    Ca semble pas fonctionner chez moi...

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par Choupi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <frame\s+(\s*(.+)=(.+)\s+)+\>
    Ca semble pas fonctionner chez moi...
    Tu dégainnes plus vite que ton ombre, j'ai pas eu le temps d'éditer que t'avais deja posté !

  10. #10
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Choupi plus rapide que son ombre

    Bon en tout cas son pb est résolu... Visiblement.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Non, non, il n'est pas résolu. J'ai eu pas mal de problèmes avec Internet et je viens juste de prendre connaissance de vos messages...
    J'étais encore en train de battre avec cette regex. J'en suis arrivé à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame[^>]*[ \n\r\t]*[^>]*src[ \n\r\t]*=[ \n\r\t\"']*([^?;)>\n\r\t\"' ]+)[ \n\r\t]*[?;)>\n\r\t\"' ]
    Je croyais qu'elle marchait mais en fin de compte. O surprise, ce matin, ca ne semble pas être bon.
    Je cherche toujours mais je vais aussi me pencher sur les solutions que vous proposez!

    Merci pour votre aide.

    Matthieu

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Bon, visiblement, la regex ci-dessus semble bonne! Si ca peut servir à quelqu'un!

    Mais le problème se situe a priori avec mon cache. C'est pour cela que cela marchait irrégulièrement.

    En tout cas, merci beaucoup pour votre aide

    Matthieu

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

Discussions similaires

  1. Script PERL et expressions rationnelles
    Par specialfox dans le forum Langage
    Réponses: 1
    Dernier message: 23/04/2012, 17h02
  2. Réponses: 2
    Dernier message: 21/02/2005, 10h42
  3. Réponses: 2
    Dernier message: 16/06/2003, 15h15
  4. [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
  5. [langage] Inclure de perl en c !!!
    Par ryo00 dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2002, 10h03

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