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

Delphi Discussion :

TRegExpr : Trouver les URLs


Sujet :

Delphi

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut TRegExpr : Trouver les URLs
    Bonjour,

    Je souhaite via une expression régulière récupérer tous les liens qui se trouve dans une page web. Voici mon code :
    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
    17
    18
    19
    20
    21
    22
    23
     
    procedure TFPrincipale.Button1Click(Sender: TObject);
    const
         Expression = '<a.*href=.*(http.*).*>.*</a>';
    var
         RegExp    : TRegExpr;
    begin
         Button1.Enabled := false;
         ListBox1.Clear;
         RegExp := TRegExpr.Create;
         try
              RegExp.Expression := Expression;
              if RegExp.Exec(Memo1.Lines.Text) then
              begin
                   repeat
                        ListBox1.Items.Add(RegExp.Match[1]);
                   until not RegExp.ExecNext;
              end;
         finally
              RegExp.Free;
              Button1.Enabled := true;
         end;
    end;
    Le seul soucis, il ne me trouve qu'une seule URL alors que la page en contient énormément.

    Peut-être que mon expression régulière n'est pas correcte ?

    Merci,
    MaTHieU_
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Salut

    tu peux chercher en boucle en augmentant l'offset de début de recherche comme ceci il me semble

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    RegExp.Expression := Expression;
    RegExp.InputString:= Memo1.Line.Text;
    Position := 1;
    while RegExp.Exec( Position ) do
      begin
      //... traitement
      ListBox1.Items.Add(RegExp.Match[1]);
      Position := RegExp.MatchPos[ 0 ];
      end;
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    La fonction "Exec(string):boolean" accepte uniquement des strings en paramètre.

    C'est peut être mon modèle de recheche qui n'est pas correct ?

    Merci,
    MaTHieU_
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Citation Envoyé par MaTHieU_
    La fonction "Exec(string):boolean" accepte uniquement des strings en paramètre.
    Tu es sur ?, dans ce que j'utilise, cette fonction est overloadée et accepte également un entier pour spécifier l'offset de recherche
    A moins que ce ne soit pas le même compo. ?
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    Citation Envoyé par MaTHieU_
    Bonjour,

    Je souhaite via une expression régulière récupérer tous les liens qui se trouve dans une page web. Voici mon code :
    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
    17
    18
    19
    20
    21
    22
    23
     
    procedure TFPrincipale.Button1Click(Sender: TObject);
    const
         Expression = '<a.*href=.*(http.*).*>.*</a>';
    var
         RegExp    : TRegExpr;
    begin
         Button1.Enabled := false;
         ListBox1.Clear;
         RegExp := TRegExpr.Create;
         try
              RegExp.Expression := Expression;
              if RegExp.Exec(Memo1.Lines.Text) then
              begin
                   repeat
                        ListBox1.Items.Add(RegExp.Match[1]);
                   until not RegExp.ExecNext;
              end;
         finally
              RegExp.Free;
              Button1.Enabled := true;
         end;
    end;
    Le seul soucis, il ne me trouve qu'une seule URL alors que la page en contient énormément.

    Peut-être que mon expression régulière n'est pas correcte ?

    Merci,
    MaTHieU_
    je pense que ton probleme provient du fait que le mode Greedy est actif par défaut.
    Essaie de rajouter RegExp.ModifierG := False juste apres RefExp.Expression := ......

    de plus ce que tu cherche avec ton expression ce ne sont pas toutes les URL, c'est juste les url se trouvant dans une balise <a ... ></a> apres le mot "href=" !!!!

    Cordialement
    http://www.pocketmt.com GLCD Font Creator home site.

  6. #6
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    En effet, ça marche parfaitement avec le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RegExp.ModifierG := false;
    Merci,
    MaTHieU_
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

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

Discussions similaires

  1. [RegEx] Trouver toutes les URL
    Par stailer dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2008, 18h23
  2. trouver les hotes
    Par tanky dans le forum C++Builder
    Réponses: 14
    Dernier message: 08/05/2007, 13h17
  3. Trouver les redirections dans des traces
    Par severine dans le forum Développement
    Réponses: 3
    Dernier message: 21/04/2004, 18h51
  4. [GUI] Ou trouver les standard ?
    Par Braim dans le forum Windows
    Réponses: 5
    Dernier message: 01/10/2003, 08h13

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