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 :

Avoir les textes avec paragraphes variables [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Points : 57
    Points
    57
    Par défaut Avoir les textes avec paragraphes variables
    Bonjour,

    j'ai un texte avec un titre de paragraphe (dans les balise span et strong), et pour chaque paragraphe, je peux avoir un nombre de sous parties variables (dans la balise p)
    le problème, c est que je n'arrive à avoir que le minimum de tous les paragraphes.
    Par exemple, dans l'exemple ci-dessous, je n'arrive pas avoir le "text5".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test = '<p><span class="title"><strong>title1</strong></span>text1</p><p>text2</p><p><span class="title"><strong>title2</strong></span>text3</p><p>text4</p><p>text5</p>';
    Pouvez-vous me dire où est mon erreur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match_all('`<p><span class="title"><strong>(.*?)</strong></span>(.*?)</p><p>(.*?)</p>`',$test,$out);
    print_r($out);
    Merci pour votre aide.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ton erreur est d'utiliser les regex pour parser du HTML. On attaque pas du html avec des regex, même si ça semble faisable dans un cas précis, ça n'est pas une solution viable, et la moindre variation dans la source mettra ta pattern en défaut.
    Ton autre erreur est de poser une question en présentant en exemple un code HTML mal formé sans queue ni tête (comme ça tu peux être sûr que personne ne va t'aider puisque personne n'aura rien compris à ton problème).

    Donc la solution est déjà de présenter un code HTML correct (avec des balises fermées et sans chevauchements) afin que l'on puisse comprendre quelque chose à la structure de départ, puis de te tourner vers DOMDocument et DOMXPath qui eux sont fait pour parser du HTML.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Points : 57
    Points
    57
    Par défaut
    merci pour ta reponse,
    j ai essaye avec les dom, mais je n ai pas reussi, pour la simple raison que la page source est comme tu le dis "mal formé sans queue ni tête"

    ainsi, même si le code peut paraître sans balises fermées et avec chevauchements, je ne peux pas le modifier vu que c'est exactement la source.

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Je crois qu'il serait plus simple de poster un vrai extrait de code.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Points : 57
    Points
    57
    Par défaut
    voici un vrai extrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span class="important"><strong>CACAO</strong></span></p><p>Un jour à la hausse, un jour à la baisse…. La fève ne cesse de faire du yo-yo, tiraillée entre la faiblesse de l'ensemble des marchés, tant  financiers que de matières premières, mais aussi la perspective d'une forte baisse des récoltes en Afrique de l'Ouest à cause du manque de pluie et de la force totalement inhabituelle de l'harmattan.  De source gouvernementale, le <strong>Ghana</strong> pourrait perdre jusqu'à 25% de sa récolte alors qu'Accra s'était fixé pour objectif de remonter cette campagne à 850 000 - 900 000 t après être tombé à 740 000 t en 2014/15.</p><p>Ainsi, les prix sur le marché à terme de New York ont chuté aujourd'hui, à $ 2 810 la tonne, approchant des plus bas depuis 10 mois enregistrés le 28 janvier, à $ 2 738 la tonne. Ceci dit, nombre d'analystes, dont ceux à UBS, estiment que la fève rebondira vers les $ 3 000.</p><p>En <strong>Côte d'Ivoire</strong>, les arrivages au 8 janvier auraient totalisé 1 104 000 t, estiment les exportateurs et ce depuis le début de la campagne le 1er octobre, contre 1 141 000 t sur la même période la campagne dernière. Les arrivages entre le 1er et le 7 février totaliseraient 41 000 t contre 48 000 t en 2015.</p><p>Coté pays importateurs, notons le succès, selon les organisateurs, du <strong>Festival du chocolat à Lisbonne</strong> qui s'est tenu du  4 au 7 février , avec quelque 30 000 visiteurs, 8 exposant et plus de 200 marques de chocolat présentes.</p><p>Côté entreprises, <strong>Itochu</strong>, n°2 des maisons de négoce japonaises derrière Mitsubishi, très implantée en Chine, s'est associée avec le négociant et industriel américain du cacao Transmar. Ils créent une entreprise conjointe basée à Londres, Transmar Group, dont Itochu détient 20%. La sogo shosha servira comme agent de distribution sur l'Asie à Transmar.</p><p>De son côté, le géant américain de la confiserie <strong>Mars </strong>a annoncé ne plus avoir recours aux colorants artificiels dans toute sa gamme de produits alimentaires (voir nos informations).</p><p><span class="important"><strong>CAFÉ</strong></span></p><p>Le café tant Arabica que Robusta terminé la période sous revue plutôt stable, la prime sur le café frais conduisant les opérateurs à puiser plutôt dans les stocks certifiés, c'est-à-dire du café dans les entrepôts certifiés des marchés à terme.  Le marché du Robusta est particulièrement calme cette semaine car, côté Arabica, le Brésil fête Carnaval, et côté Robusta, le Vietnam fête la Nouvelle année, en plein festival du Tet. L'Arabica termine à $ 1,1425 la livre et le Robusta à $ 1 384 la tonne.</p><p>Cette demande soutenue pour du café certifié pourrait marquer un retour vers une tendance haussière des prix notamment de l'Arabica, estime Romain Lathiere, gestionnaire de fonds à Diapason Commodities Management à Lausanne. En effet, les volumes des stocks certifiés baissent, passant de 1 727 703 sacs le 31 décembre dans les stocks du ICE à 1 588 777 sacs le 5 février,  et les fonds spéculatifs seraient plutôt à l'achat. En outre, il y a des craintes de sécheresse en Colombie et on constate des signes de raffermissement du real, la monnaie brésilienne, ce qui conduirait les producteurs du géant latino-américain à moins se porter à la vente.</p><p>Au <strong>Kenya</strong>, lors des ventes aux enchères qui se sont tenues mardi, le Grade AA s'est vendu dans une fourchette de prix allant de $ 106 à 591 le sac de 50 kg soit en hausse par rapport aux ventes précédentes lorsque la fourchette a été de $ 71 à 507. Le AB a trouvé preneur entre $ 71 et 340 contre $ 64 et 360.</p><p><span class="important"><strong>CAOUTCHOUC</strong></span></p><p>Les cours du caoutchouc reculaient mercredi pour la quatrième séance consécutive en s’approchant d’un plus bas de sept ans. La chute de l’index boursier japonais le Nikkei ainsi que la fermeté du yen, au plus haut depuis 15 mois, ont incité les investisseurs à vendre. Le contrat de juillet  a clôturé à 147,1 yens ($1,28) le kilo. « <em>Le sentiment du marché est devenu très sombre avec des marchés financiers mondiaux qui semblent entrer  en crise et l'économie américaine qui montre des signes de faiblesse</em> » indique Satoru Yoshida, analyste chez  Rakuten Securities. En outre, la demande est faible avec les vacances du Nouvel an et la fermeture des marchés de Shanghai et Singapour.</p><p>Côté entreprise, <strong>Goodyear Tire &amp; Rubber</strong> a publié mardi un bénéfice trimestriel meilleur que prévu, porté par la hausse des ventes en volume et une baisse des coûts des matières premières. Le coût des biens vendus par le premier fabricant américain de pneumatiques a baissé de 8%, à $3,07 milliards (€2,74 milliards), conséquence, entre autres, d'un prix du pétrole qui a pratiquement fondu de moitié au quatrième trimestre, tandis que celui du caoutchouc a diminué de 4%.</p><p>Les ventes ont augmenté de 7% à 42,1 millions de pneus sur le trimestre clos au 31 décembre, en raison notamment de l'acquisition de Nippon Goodyear au Japon.</p><p>Goodyear a fait état d'une perte nette part du groupe de $380 millions contre un bénéfice net de $2,13 milliards un an auparavant, solde qui incorporait un avantage fiscal de $2,2 milliards. Le chiffre d'affaires est passé de $4,36 milliards à $4,06 milliards, entamé par un dollar fort.</p><p><span class="important"><strong>COTON</strong></span></p><p>Les cours du coton sont tombés cette semaine à un plus bas d’un an à 58,25 cents la livre pour le contrat de mars à la suite du dernier rapport sur l’offre et la demande de l’USDA. La tendance est plutôt baissière avec une moindre réduction des stocks qu’anticipée suite à la faible demande. En outre le coton subit la concurrence du polyester. Les prévisions sont plus faibles tant sur la consommation que les importations. Les importations sont à leur plus bas niveau depuis 2004/05 suite aux chutes de la demande en Chine (moins 500 000 balles) et au Pakistan (moins 400 000 balles), ce qui impactent les flux commerciaux des Etats-Unis. Les exportations américaines se sont contractées de 500 000 balles à 9,5  millions de balles.  La consommation mondiale de coton est réduite de 1,3 million de balles. Le déficit de la production mondiale demeure significatif, de 8,2 millions de balles, et un déficit plus important est attendu en 2016/17, observe Rabobank.  Les stocks sont estimés juste au dessus de 104 millions de balles.</p><p>

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    J'ai retrouvé l'url d'origine. Le html est bien formé (les balises sont fermées), par contre la structure n'est pas pratique du tout car chaque titre n'est pas encapsulé avec les paragraphes qui s'y rapportent, tout est à la queue leu-leu, résultat, il n'est pas possible de travailler par blocs avec xpath. Mais comme chaque élément est contenu dans une balise p (le titre y compris), le plus simple est de tester quand la balise p a comme premier enfant une balise span.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    libxml_use_internal_errors(true);
     
    $dom = new DOMDocument;
    $dom->loadHTMLFile($url); // url de la page
    // ou
    //$dom->loadHTML($html); // chaîne contenant le html
     
    $xp = new DOMXPath($dom);
     
    $paraNodeList = $xp->query('//div[@id="block-system-main"][1]/div[1]/article[1]
    /div[1]/div[contains(@class,"group-article-main")]/div/div/div/p');
     
    $results = [];
    $temp = [];
    foreach ($paraNodeList as $paraNode) {
        if ( $paraNode->hasChildNodes() && $paraNode->firstChild->nodeName == 'span') {
            if (!empty($temp)) {
                $results[] = $temp;
                $temp = [];
            }
            $temp['title'] = $paraNode->nodeValue;
        } else {
            if (!isset($temp['para']))
                $temp['para'] = [];
     
            $htmlContent = '';
     
            foreach ($paraNode->childNodes as $childNode)
                $htmlContent .= $dom->saveHTML($childNode);
     
            $temp['para'][] = $htmlContent;
        }
    }
    // on oublie pas le dernier
    if (!empty($temp))
        $results[] = $temp;
     
    libxml_clear_errors();
     
    print_r($results);
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Points : 57
    Points
    57
    Par défaut
    merci pour ton aide,
    je vais d esssayer et ca marche

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

Discussions similaires

  1. Couleur de texte avec une variable
    Par xaltar92 dans le forum Langage
    Réponses: 3
    Dernier message: 27/07/2011, 13h26
  2. Input text avec name variable
    Par emna. dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 18/05/2011, 11h35
  3. Afficher un text avec paragraphes
    Par AIDExpress dans le forum C#
    Réponses: 2
    Dernier message: 10/06/2010, 08h56
  4. [Débutant] UIControl Text avec des variables
    Par lekev62 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 14/12/2009, 16h48
  5. [VBA] Comment valoriser un champ texte avec une variable ?
    Par Jean_Benoit dans le forum Access
    Réponses: 3
    Dernier message: 25/12/2006, 15h55

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