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 :

PB avec un preg_match_all pour la seconde extraction


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Points : 94
    Points
    94
    Par défaut PB avec un preg_match_all pour la seconde extraction
    Bonjour j'essaye de récupérer tous les NNNN de la page chargée.

    La page contient un nombre variable de lien comme ci-dessous
    Exemple de lien href="http://www.site.com/produit.php?nom=XXXX&id=200&ref=NNNN
    où XXXX est variable en longueur et contenu
    où NNNN est variable en longueur et contenu

    voici le code pour le premier preg_match_all, j'obtiens un premier résultat qui m'extrait "XXXX&id=200&ref=NNNN"
    Mais je bloque pour extraire le NNNN dans le second car il me dit
    Warning: preg_match_all() expects parameter 2 to be string, array given in


    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
     
    <?php
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "http://www.site.com/page.html");
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $page = curl_exec($curl);
    curl_close($curl);
    preg_match_all("|href=\"http:\/\/www.site.com/produit.php\?nom=(.*)\">|U",$page,$regs);
     preg_match_all("|&id=200&ref=(.*)|U",$regs[1],$regs2);
    echo( "<pre>" );
    print_r($regs[1]);
    //print_r($regs2[1]);
    echo( "</pre>" ); 
     
    ?>
    Merci de vos conseils

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    Bonjour,

    parse_url ne serait-il pas plus approprié ?

  3. #3
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    La puissance des expressions rationnelles nous permet d'obtenir plusieurs informations en un coup.

    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
    function get_Value($id,$page){
    	$id=preg_quote($id,'%');
    	if(preg_match_all('%<a\s*[^\s]*\shref\s*=\s*["|\']http://www\.site\.com/produit\.php\?nom=(.*?)&id='.$id.'&ref=([^"\']*?)["|\'][^>]*>([^<]*)</a>%i',$page,$regs,PREG_PATTERN_ORDER))
    		return $regs;
    	else
    		return false;
    }
     
    $page = '
    	<a href="http://www.site.com/produit.php?nom=lien1&id=200&ref=aaaa">Id=200 - Lien #1</a>
    	<a href="http://www.site.com/produit.php?nom=lien2&id=200&ref=bbbb">Id=200 - Lien #2</a>
    	<a href="http://www.site.com/produit.php?nom=lien1&id=300&ref=cccc">Id=300 - Lien #1</a>
    	<a href="http://www.site.com/produit.php?nom=lien2&id=300&ref=dddd">Id=300 - Lien #2</a>
    ';
     
    $id_exemple='200';
    $res=get_Value($id_exemple,$page);
    if($res!==false){
    	echo "<pre>\n"; print_r($res); echo "</pre>\n";
    }
    Avec $id_exemple = '200';, nous obtenons
    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
    Array(
    	[0] => Array(
    		[0] => <a href="http://www.site.com/produit.php?nom=lien1&id=200&ref=aaaa">Id=200 - Lien #1</a>
    		[1] => <a href="http://www.site.com/produit.php?nom=lien2&id=200&ref=bbbb">Id=200 - Lien #2</a>
    	)
    	[1] => Array(
    		[0] => lien1
    		[1] => lien2
    	)
    	[2] => Array(
    		[0] => aaaa
    		[1] => bbbb
    	)
    	[3] => Array(
    		[0] => Id=200 - Lien #1
    		[1] => Id=200 - Lien #2
    	)
    )
    Avec $id_exemple = '300';, nous obtenons
    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
    Array(
    	[0] => Array(
    		[0] => <a href="http://www.site.com/produit.php?nom=lien1&id=300&ref=cccc">Id=300 - Lien #1</a>
    		[1] => <a href="http://www.site.com/produit.php?nom=lien2&id=300&ref=dddd">Id=300 - Lien #2</a>
    	)
    	[1] => Array(
    		[0] => lien1
    		[1] => lien2
    	)
    	[2] => Array(
    		[0] => cccc
    		[1] => dddd
    	)
    	[3] => Array(
    		[0] => Id=300 - Lien #1
    		[1] => Id=300 - Lien #2
    	)
    )

Discussions similaires

  1. xsl:for-each avec un parametre pour select
    Par arnog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/08/2008, 13h09
  2. Err $251E avec le BDE... pour un prog sur une becane...
    Par Harry dans le forum Bases de données
    Réponses: 14
    Dernier message: 11/04/2006, 17h59
  3. [Kylix] Erreur "File not Found : Windows.dcu"
    Par derrick23_2003 dans le forum EDI
    Réponses: 4
    Dernier message: 27/12/2005, 11h18
  4. [tomcat] [jsp] Problème avec driver OCI pour oracle
    Par nanardcompanie dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 01/07/2004, 09h54
  5. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21

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