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] Problème d'expression régulière


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    mai 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut [langage] Problème d'expression régulière
    Bonjour,

    voila j'ai un probleme avec l'expression régulière suivante qui me découpe une balise HREF d'une page HTML:

    /(.*)<\s*a(.*)href\s*=\s*"(.*)"(.*)>(.*)/
    $1 $2 $3 $4 $5

    Avec le code suivant, <a href="test.html">Test</a> j'obtiens pour $3 :
    test.html

    Avec le code suivant, "<a href="test.html"><img src="image.jpg"></a>, j'obtiens pour $3 :
    test.html"><img src=

    Le premier fonctionne bien mais pour le deuxième, j'aimerais avoir le même résultat que pour le premier, c'est à dire que je n'obtienne pour $3 que le contenu entre les premieres côtes ouvrantes et les premières côtes fermantes.

    J'attends votre aide

    Merci

  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 : 231
    Points
    231
    Par défaut
    Juste une question: tu veux recuperer tout ? ou juste test.html ?
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  3. #3
    Futur Membre du Club
    Inscrit en
    mai 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    tous les $i

  4. #4
    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 : 231
    Points
    231
    Par défaut
    Bon alors ce n'est pas clair ca voici ce que je recupere pour chaque $ avec ton expression. Je pense que tu veux en $4 Test ? non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1&#58; 2&#58;  3&#58;test.html 4&#58;>Test</a 5&#58; 
    1&#58; 2&#58;  3&#58;test.html"><img src="image.jpg 4&#58;></a 5&#58;
    Donne un exemple précis avec chacune des correspondances.
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  5. #5
    Futur Membre du Club
    Inscrit en
    mai 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Pour l'exemple 1, je voudrais obtenir :
    1 :
    2 :
    3 : test.html
    4 :
    5 : Test</a>

    Pour l'exemple 2, je voudrais obtenir :
    1 :
    2 :
    3 : test.html
    4 :
    5 : <img src="image.jpg"></a>

  6. #6
    Futur Membre du Club
    Inscrit en
    mai 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Pour l'exemple 1, je voudrais obtenir :
    1 :
    2 :
    3 : test.html
    4 :
    5 : Test</a>

    Pour l'exemple 2, je voudrais obtenir :
    1 :
    2 :
    3 : test.html
    4 :
    5 : <img src="image.jpg"></a>

  7. #7
    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
    Je proposerais comme solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /&#40;.*&#41;<\s*a&#40;.*&#41;href\s*=\s*"&#91;^"&#93;*"&#40;&#91;^>&#93;*&#41;>&#40;.*&#41;/
    Soyons clair, ce n'est pas idéal (par exemple tu ne peux pas avoir de quotes dans ton lien) mais c'est le mieux qu'on puisse faire avec des regexs "simples". Je recommande "Maitrise des Expressions Régulières" de Jeffrey Friedl, chez O'reilly (non ce n'est pas de la pub !!) pour des solutions plus complètes.

    --
    Jedaï

  8. #8
    Futur Membre du Club
    Inscrit en
    mai 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Re salut,

    cette expression regulière fonctionne mais lorsque j'ai deux balises <a href> qui se suivent, seule la deuxième est traitée.

    ex :

    <a href="Test1.html">Test1</a><a href="Test2.html">Test2</a>

    Et donc :
    $1 : <a href="Test1.html">Test1</a>
    $2 :
    $3 : Test2.html
    $4 :
    $5 : Test2</a>

    Le but de ce script est d'extraire $3 pour le mettre en minuscule. Donc si vous avez une autre méthode pour faire ceci, je suis preneur...

  9. #9
    Membre du Club
    Inscrit en
    décembre 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : décembre 2003
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Avec le code suivant, "<a href="test.html"><img src="image.jpg"></a>, j'obtiens pour $3 :
    test.html"><img src=
    Il faut que tu ajoutes un ? pour que la recherche de motif s'arrete à la premiere occurence de ". Comme ca donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /&#40;.*&#41;<\s*a&#40;.*&#41;href\s*=\s*"&#40;.*?&#41;"&#40;.*&#41;>&#40;.*&#41;/
    avec ca, $3 devrait bien valoir test.html.

  10. #10
    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
    Et alors, tu n'as qu'à analyser $1, non ?
    Qu'est ce que tu veux traiter exactement ??
    S'il s'agit d'un document HTML complet, tu sais que HTML:arser est ton ami, et dans ton cas particulier HTML::LinkExtor (ou peut-être HTML::LinkExtractor si tu veux le texte des liens) ?
    A part dans les cas très simples, il est recommandé d'utiliser ces modules plutôt que les regexs pour traiter un document html, car les regexs deviennent vites trop compliquées à gérer.


    [EDIT] Schnecke, ma solution est meilleure, car plus rapide
    Xavro > Tu aurais dû tout de suite nous préciser ton but, on aurait pu te proposer une regex comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $html =~ s/<a &#40;.+?&#41; href \s* = \s* "&#40;&#91;^"&#93;+&#41;"/'<a'.$1.'href="'.lc&#40;$2&#41;.'"'/exgi;
    --
    Jedaï

  11. #11
    Futur Membre du Club
    Inscrit en
    mai 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    merci tous les deux particulièrement Jedai.

    Par contre est ce que tu sais comment faire pour remplacer en plus tous les caractères accentués par des caractères non accentués et les caractères "ç" et "°" par respectivement "c" et "_"

  12. #12
    Futur Membre du Club
    Inscrit en
    mai 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    c'est j'ai trouve, il suffit de faire une fonction et la mettre à la place de la fonction "lc"

    Merci Jedai

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

Discussions similaires

  1. ODBC, langage C et Visual C++ Express 2005
    Par pierremx dans le forum C
    Réponses: 2
    Dernier message: 14/11/2007, 18h51
  2. Réponses: 3
    Dernier message: 07/09/2004, 12h01
  3. Réponses: 7
    Dernier message: 16/07/2004, 13h24
  4. Réponses: 7
    Dernier message: 02/04/2004, 10h47
  5. Réponses: 2
    Dernier message: 04/01/2004, 15h14

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