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

Collection et Stream Java Discussion :

expression réguliere java


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 54
    Par défaut expression réguliere java
    Bonjour à tous et toute. Je réalise un petit parser (un parser light dirons nous) qui me parse donc du HTML.
    Je réalise ce parser en utilisant des expressions régulieres.
    J'en arrive à ma question :

    Lorsque j'ai la source suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <DIV STYLE="position:absolute; visibility:hidden; left:0; top:0; width:0; height:0;"> [<a href='./pages/03alhomepag.html'></a>] [<a href='http://www.lmsoft.com/'>Web Creator</a>] [<a href='http://www.lmsoft.com/'>LMSOFT</a>] </DIV>
    et mon expression réguliere suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (?i)<a.*href=(\"|'){1}([^\"]*)(\"|'){1}[^>]*
    qui me sers donc a récuperer tous les liens..
    Lorsque je l'execute, je ne recupere qu'une seule entité (récupération du matcher.group(2):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    http://www.matec-sa.com/pages/03alhomepag.html'></a>]
    [<a%20href='http://www.lmsoft.com/'>Web%20Creator</a>]
    [<a%20href='http://www.lmsoft.com/
    Je ne récupère qu'une seule entite au lieu de 3 :
    ./pages/03alhomepag.html
    http://www.lmsoft.com/
    http://www.lmsoft.com/

    Quelqu'un a t'il une idée pour me dépatouiller?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je vois deux problèmes dans ton expression regulière :
    • Tu n'indique pas la simple quote dans le centre de ton expression : ([^\"]*)
    • Ton .* pour ignorer tous les caractères entre le <a et le href est trop posséssif car il prend tous les caractères de la ligne. Tu dois utiliser .*? qui se contentera du bloc correspondant le plus petit.
    Ce qui donne au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?i)<a.*?href=(\"|'){1}([^\"']*)(\"|'){1}[^>]*
    Note : Les
    {1} sont optionnel puisque c'est la valeur par défaut...

    Enfin, seul petit souci que cela puisse poser : si tu as un mélange de " et de ' au sein de ton attribut, par exemple : href="javascript:method('value')"

    Tu obtiens alors une valeur tronqué :
    javascript:method( puisqu'il s'arrêtera à la première quote (simple ou double).

    Tu peux éviter cela en séparant les deux cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?i)<a.*?href=(\"([^\"]*)\"|'([^\']*)')[^>]*
    avec
    1. group(1) qui contient tout le bloc de l'href avec les quotes doubles ou simples comprise (ex : "javascript:method('value')" )*
    2. group(2) qui contient le contenu de href sans les quotes doubles, ou null si c'est des quote simple.
    3. group(3) qui contient le contenu de href sans les quotes simples, ou null si c'est des quotes doubles.

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 54
    Par défaut
    Merci pour ta réponse

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

Discussions similaires

  1. Expression réguliere java
    Par air75 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 19/11/2011, 19h16
  2. [Debutant] Expression réguliere
    Par grizzz dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 17/08/2007, 16h14
  3. expression réguliere
    Par htristra dans le forum C
    Réponses: 11
    Dernier message: 06/09/2005, 22h33
  4. expression réguliere en c++
    Par alambics dans le forum MFC
    Réponses: 9
    Dernier message: 10/03/2004, 20h19
  5. expression réguliere
    Par alambics dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/03/2004, 13h52

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