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 :

Supprimer les <tr id='annee' > [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Supprimer les <tr id='annee' >
    Bonsoir, ayant vu une autre discussion sur le theme des expressions regulieres et des feuilles html, celle-ci est differente.

    En effet, je ne dois pas parser ma feuille html mais enlever certains elements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->dhtml = preg_replace("#<tr\s+id='[a-z_]{2-4}".$year.".+</tr>#","",$this->dhtml);
    Explications : $this->dhtml est une variable contenant un <table>, tout une tripote de <tr id='ym_2005-12'><td>Year</td><td>blabla</td></tr> et un </table> donc c'est une variable tres longue .

    Voici, mon souhait : il y a 3 sorte de tr differents (<tr id='y_2005'>; <tr id='ym_2005-07'>; <tr id='ymd_2005-06-07'> ==> les annees vont de 2005 a 2008), apres un certain calcul je deduis que je n'ai plus besoin des <tr> de l'annee 2005 (exemple) donc il me faudrait supprimer tous les <tr> ressemblant aux 3 cites precedemment.

    Malgre le test de l'expression reguliere, a la fin je me retrouve soit :
    - avec rien de change
    - avec tout qui a disparu (cela peut s'expliquer par le .+ avant le </tr>)

    PS : J'ai aussi fait le test en mettant des annees en dures mais sans succes...

    Auriez-vous des suggestions ?

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    2 questions :
    * Y a t'il des balises html a l'interieur des tr que tu souhaite supprimer ?
    * je ne vois pas de chevron fermant pour la balise <tr..., c'est normal ?

    ... et 1 remarque :
    * si tu veux éviter que tout soit supprimé avec .+, utilise l'option de recherche U
    http://fr3.php.net/manual/fr/referen....modifiers.php

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je vais fournir une petite explication en plus :
    Apres execution du script de creation d'une page dhtml j'obtiendrais un resultat sous cette forme :

    2005 0
    2006 75
    2007 12
    2008 11

    Et lorsque l'on cliquera sur une anne alors (la c'est la partie javascript) tous les mois de l'annee cliquee se deplieront.

    2006 75
    2006-01 12
    2006-02 20
    ...

    Et il en est de meme avec les jours. Vous conviendrez donc que si je clique sur l'annee 2005 tous les resultats pour tous les mois seront = 0, d'ou le souhait d'enlever les annees ou il n'y aura pas de resultats concrets a afficher.

    L'expression reguliere ne va concerner que le <tr> d'une annee, pas besoin de se preoccuper des <tr> des mois et des jours.
    Citation Envoyé par Fladnag
    * Y a t'il des balises html a l'interieur des tr que tu souhaite supprimer ?
    Avec le petit schema, on peut remarquer qu'a l'interieur d'un <tr> il y a 2 <td> (1 pour l'annee et 1 pour le resultat) qui seront donc a enlever aussi.
    Citation Envoyé par Fladnag
    * je ne vois pas de chevron fermant pour la balise <tr..., c'est normal ?
    Oui, je l'ai mis dans le lot avec le .+.

    Donc avec ceci, j'ai change mon expression mais toujours pas .
    Voici la forme la plus dure (valeur en dur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->dhtml = preg_replace("#<tr id='y_2005' .+><td .+>2005</td><td .+>.+</td></tr>#","",$this->dhtml);
    .+ apres le tr => onMouseOver, onClick ...
    .+ apres les td => width='xx%'

    Le plus etrange est que, certes il m'efface tout (tous les tr, toute la page) mais en plus il supprime meme le <table> la je ne vois vraiment pas...

    Des indices ?

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Pour le fait qu'il supprime tout, comme je l'ai dit, utilise U comme option de masque.

    ton .+ est trop "gourmand" et il prend par defaut (sans l'option U) la plus grande chaine possible, donc avec :

    'AbbbAbbbA'
    '#A.+A#' => correspond a la chaine en entier ("AbbbAbbbA")
    '#A.+A#U' => correspond a la chaine la plus courte ("AbbbA")

    Essaye le code ci dessous :

    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
    <?php
    $content="
    aaaa<tr id='y_2005'><td>AAAAAAAAA</td></tr>aaaaaaa
    aaaa<tr id='ym_2005-07'><td>AAAAAAAAA</td></tr>aaaaaaa
    aaaa<tr id='ymd_2005-06-07'><td>AAAAAAAAA</td></tr>aaaaaaa
    bbbb<tr id='y_2006'><td>BBBBBBBBB</td></tr>bbbbbbb
    bbbb<tr id='ym_2006-07'><td>BBBBBBBBB</td></tr>bbbbbbb
    bbbb<tr id='ymd_2006-06-07'><td>BBBBBBBBB</td></tr>bbbbbbb
    ";
     
    $masque="#<tr[^>]+id='ym?d?_2005[-0-9]*'[^>]*>.+</tr>#U";
     
    $content=preg_replace($masque, "", $content);
     
    echo '<pre>';
    var_dump(htmlentities($content));
    ?>
    ca devrait fonctionner... A CONDITION de n'avoir aucun tableau avec une autre suite de tr/td dans une balise tr a supprimer
    Comme je ne connais pas exactement la forme de tes tableaux, je ne peux pas dire ;o)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Parfait ! C'est exactement ca. Il ne me restait plus qu'a remplacer 2005 par ".$year." et voila.


    Merci bien.

    A tantot.

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

Discussions similaires

  1. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. Réponses: 4
    Dernier message: 10/08/2004, 11h59
  4. [Jsp] Supprimer les caractère spéciaux d'une chaine
    Par PeteMitchell dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/05/2004, 11h11
  5. [String] Comment supprimer les accents
    Par iuz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2004, 02h58

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