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 PHP Discussion :

Limite d'une regexp ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut Limite d'une regexp ?
    Bonjour à tous et à toutes.

    je cherche a extraire tous les hyperliens d'une page web. Je me sers donc de cette petite regexp sympathique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (<a[^<>]*?href=["\'](.+?)["\'].*?>(.*?)</a>)|(<form[^<>]*?action=["\'](.+?)["\'].*?>)|(<area[^<>]*?href=["\'](.+?)["\'].*?>)
    Elle fonctionne a merveille mais voila que j'ai un site ou il y a énormément de balise <area ...>

    Donc après plusieurs test voici les résultats que je ne comprend pas très bien...

    Jusqu'à 7 liens ca marche
    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
    <area shape="poly" coords="..." href="lien1.html" title="title1">
    <area shape="poly" coords="..." href="lien2.html" title="title2">
    <area shape="poly" coords="..." href="lien3.html" title="title3">
    <area shape="poly" coords="..." href="lien4.html" title="title4">
    <area shape="poly" coords="..." href="lien5.html" title="title5">
    <area shape="poly" coords="..." href="lien6.html" title="title6">
    <area shape="poly" coords="..." href="lien7.html" title="title7">
     
    pattern : '#(<a[^<>]*?href=["\'](.+?)["\'].*?>(.*?)</a>)|(<form[^<>]*?action=["\'](.+?)["\'].*?>)|(<area[^<>]*?href=["\'](.+?)["\'].*?>)#'
     
    Résultat : 
    ( 0 => '<area shape="poly" coords="..." href="lien1.html" title="title1">'
    1 => ''
    2 => ''
    3 => ''
    4 => ''
    5 => ''
    6 => '<area shape="poly" coords="..." href="lien1.html" title="title1">'
    7 => 'article408.html'
    )
    Et a 8 ca plante...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <area shape="poly" coords="..." href="lien1.html" title="title1">
    <area shape="poly" coords="..." href="lien2.html" title="title2">
    <area shape="poly" coords="..." href="lien3.html" title="title3">
    <area shape="poly" coords="..." href="lien4.html" title="title4">
    <area shape="poly" coords="..." href="lien5.html" title="title5">
    <area shape="poly" coords="..." href="lien6.html" title="title6">
    <area shape="poly" coords="..." href="lien7.html" title="title7">
    <area shape="poly" coords="..." href="lien8.html" title="title8">
     
    pattern : '#(<a[^<>]*?href=["\'](.+?)["\'].*?>(.*?)</a>)|(<form[^<>]*?action=["\'](.+?)["\'].*?>)|(<area[^<>]*?href=["\'](.+?)["\'].*?>)#'
     
    Pas de match
    Quelqu'un pourrait m'expliquer pourquoi et s'il y a un moyen de pallier ce problème ?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    utilise DOMDocument pour parser du HTML

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Certes ^^ mais ca n'explique pas le problème un peu étrange... mais merci du conseil

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Avalion Voir le message
    Certes ^^ mais ca n'explique pas le problème un peu étrange... mais merci du conseil
    pourquoi étrange y'a rien qui me choque le [^<>] c'est tout les caractères sauf < et > donc forcement le era est dedans, utilise les bons outils et tu n'auras pas ce probleme ...

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    oui <area ... href=""> est bien reconnu par '#<a[^<>]*?href="(.+?)"#' mais pas par '#<a[^<>]*?href="(.+?)"[^<>]*?>.*?</a>#'

    deuxièmement même au cas ou ca aurait été ca, il aurait du me retourner ma balise, même s'il me la considérait comme un lien et pas un area. or ici, le retour est vide... Ce que je ne pige pas c'est juste que ca fonctionne pour une chaine ou il y a 7 patterns à la syntaxe totalement identique mais plus pour 8 (dans ce cas la)

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    mais pas par '#<a[^<>]*?href="(.+?)"[^<>]*?>.*?</a>#
    normale si tu fermes ton <area> par </a> ...

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    J'ai posté mes tests, il n'y a pas de </a> J'ai fini par réussir à faire ce que je voulais mais je comprend toujours pas pourquoi cette erreur à lieu (simple curiosité ^^) et effectivement, j'ai changé mon pattern en '#<a[^r>][^<>]*? (...)#' merci pour ca ^^

    Je précise que je fais un simple preg_match et non un preg_match_all dans le cas du test
    Citation Envoyé par Avalion Voir le message
    Jusqu'à 7 liens ca marche
    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
    <area shape="poly" coords="..." href="lien1.html" title="title1">
    <area shape="poly" coords="..." href="lien2.html" title="title2">
    <area shape="poly" coords="..." href="lien3.html" title="title3">
    <area shape="poly" coords="..." href="lien4.html" title="title4">
    <area shape="poly" coords="..." href="lien5.html" title="title5">
    <area shape="poly" coords="..." href="lien6.html" title="title6">
    <area shape="poly" coords="..." href="lien7.html" title="title7">
     
    pattern : '#(<a[^<>]*?href=["\'](.+?)["\'].*?>(.*?)</a>)|(<form[^<>]*?action=["\'](.+?)["\'].*?>)|(<area[^<>]*?href=["\'](.+?)["\'].*?>)#'
     
    Résultat : 
    ( 0 => '<area shape="poly" coords="..." href="lien1.html" title="title1">'
    1 => ''
    2 => ''
    3 => ''
    4 => ''
    5 => ''
    6 => '<area shape="poly" coords="..." href="lien1.html" title="title1">'
    7 => 'article408.html'
    )
    Et a 8 ca plante...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <area shape="poly" coords="..." href="lien1.html" title="title1">
    <area shape="poly" coords="..." href="lien2.html" title="title2">
    <area shape="poly" coords="..." href="lien3.html" title="title3">
    <area shape="poly" coords="..." href="lien4.html" title="title4">
    <area shape="poly" coords="..." href="lien5.html" title="title5">
    <area shape="poly" coords="..." href="lien6.html" title="title6">
    <area shape="poly" coords="..." href="lien7.html" title="title7">
    <area shape="poly" coords="..." href="lien8.html" title="title8">
     
    pattern : '#(<a[^<>]*?href=["\'](.+?)["\'].*?>(.*?)</a>)|(<form[^<>]*?action=["\'](.+?)["\'].*?>)|(<area[^<>]*?href=["\'](.+?)["\'].*?>)#'
     
    Pas de match

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    utilise DOMDocument pour parser du HTML
    je vois pas pourquoi tu t’embêtes ...

Discussions similaires

  1. Limiter un JTextField par une regexp
    Par cledesol dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 23/04/2009, 11h44
  2. Limite d'une ligne
    Par Etienne1 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/09/2007, 18h02
  3. [C#][xml][regexp] Recherche d'une regexp dans un fichier xml
    Par LeJocker dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/10/2005, 12h29
  4. [Regexp] Obtenir une regexp à partir du texte ?
    Par Alec6 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2005, 16h40
  5. taille limite d'une priority_queue
    Par traiangueul dans le forum SL & STL
    Réponses: 3
    Dernier message: 26/08/2004, 17h19

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