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 :

Utilisation de preg_replace () [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut Utilisation de preg_replace ()
    Bonjour à tous,

    Je dois effectuer un remplacement de caractères dans une chaine et je pense être obligé d'utiliser preg_replace (). Mon problème est que j'ai du mal à construire l'expression régulière qui va bien.

    Je vous explique :

    Voilà ma chaine de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <li class="cat-item cat-item-6 current-cat"><a href="" title="">menu 1</a></li><li class="cat-item cat-item-5"><a href="" title="">menu 2</a></li><li class="cat-item cat-item-4"><a href="" title="">menu 3</a><span class="fin"></span>
    vous remarquerez que dans le premier composant <li> il y une class current-cat, lorsqu'un composant <li> contient cette class current-cat il faut que j'encadre le composant <a> par des balises <span> du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <li class="cat-item cat-item-6 current-cat"><span class="debut"></span><a href="" title="">menu 1</a><span class="fin"></span>
    </li>

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Voici un essai à adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $str = <<< EOS
    <li class="cat-item cat-item-6 current-cat"><a href="" title="">menu 1</a></li><li class="cat-item cat-item-5"><a href="" title="">menu 2</a></li><li class="cat-item cat-item-4"><a href="" title="">menu 3</a><span class="fin"></span>
    EOS;
     
    $reg = '#(<li class="[^"]*current-cat[^"]*">)(<a href[^>]+>[^<]+</a>)#';
    $rep = '$1<span class="debut"></span>$2<span class="fin"></span>';
     
    print preg_replace($reg, $rep, $str);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Salut merci pour ta réponse. Je viens de faire un test et cela ne fonctionne pas. Peux tu m'expliquer un peu le contenu de $reg et $rep afin que je puisse apporter les modifications nécessaires pour que cela fonctionne ?

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    testé chez moi avec ce code (c'est juste pour mettre en évidence les modifications) :
    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
    <html>
    <head>
    <style type="text/css">
    .debut, .fin {font-weight:bold; background:#000; color:#FFF; padding:5px;}
    </style>
    </head>
    <body>
    <ul>
    <?php
    $str = '<li class="cat-item cat-item-6 current-cat"><a href="" title="">menu 1</a></li><li class="cat-item cat-item-5"><a href="" title="">menu 2</a></li><li class="cat-item cat-item-4"><a href="" title="">menu 3</a>';
     
    $reg = '#(<li class="[^"]*current-cat[^"]*">)(<a href[^>]+>[^<]+</a>)#i';
    $rep = '$1<span class="debut">a</span>$2<span class="fin">b</span>';
     
    echo preg_replace($reg, $rep, $str);
    ?>
    </ul>
    </body>
    </html>
    ça marche nickel...

  5. #5
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Je vois pas, j'ai re testé avec tes modifications et ça ne me donne toujours rien ...

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    hmmmm *tente de deviner le code que tu as écrit* hmmmmm *concentration*

    ERROR UNABLE TO CONNECT TO [boule de cristal]

    Arf pas de chance, ma boule de cristal est en panne aujourd'hui...

    Tu pourrais donner ton code ?

  7. #7
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut


    Alors je t'explique le truc plus en détail; j'utilise le CMS Wordpress et il y a une fonction que te renvoie le menu sous forme d'un string. Je récupère cet string dans une variable php et ensuite je fais quelques traitement dessus. Wordpress ajoute automatiquement la class current-cat à la rubrique en cours. Moi j'aimerai ajouté <span class="début"><a href ..... </a></span><span class="fin"></span> pour pouvoir faire une mise en page un peu spécial.

    Voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $categorie = wp_list_categories('echo=0&show_count=0&title_li=&exclude=11,12,13,14,15,16'); //Renvoie la string contenant du code html
     
    $categorie = str_replace ('/n', '<br />', $categorie);//Petit hack pour insérer des sauts de ligne en damin du cms
     
    $reg = '#(<li class="[^"]*current-cat[^"]*">)(<a href[^>]+>[^<]+</a>)#i';
     
    $rep = '$1<span class="debut">a</span>$2<span class="fin">b</span>';//Je ne comprends pas l'histoire du " a " et du " b " ???
     
    $categorie = preg_replace($reg, $rep, $categorie);
     
    print $categorie;

  8. #8
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    alors... le "a" et le "b" c'était juste pour être sur de ce que ça affiche... en gros, ça veut dire que pour les liens où sera trouvée la class "current-cat" au lieu d'avoir

    * Lien

    Tu auras

    * aLienb


    Par contre, entre ton premier post et le précédent, tu as demandé 2 résultats différents :s

    dans le premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li><span class="debut"></span><a href=""></a><span class="fin"></span>
    dans le précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li><span class="debut"><a href=""></a></span><span class="fin"></span>
    forcément, si c'est le 2nd que tu veux, le code réalisé par s.n.a.f.u ne correspond pas à ce que tu veux :/

    PS : pourrais-tu aussi donner le string complet que tu essayes de modifier (si l'exemple de ton premier post était partiel uniquement, sinon c'est pas la peine )

  9. #9
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Erreur de ma part !

    Le code HTML que je veux récupérer est bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span class="debut"></span><a href="..." title="...">mon lien</a><span class="fin"></span>

  10. #10
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Voila le string complet généré par la fonction Wordpress :

    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
     
    <li><a href="http://localhost/dr_benoit/v1" title=""><br />Accueil</a></li>			
     
    <li class="cat-item cat-item-8 current-cat"><a href="http://localhost/dr_benoit/v1/?cat=8" title="Voir tous les articles classés dans <br />Consultations"><br />Consultations</a>
     
    </li><li class="cat-item cat-item-9"><a href="http://localhost/dr_benoit/v1/?cat=9" title="Voir tous les articles classés dans <br />Interventions"><br />Interventions</a></li>
     
    <li class="cat-item cat-item-10"><a href="http://localhost/dr_benoit/v1/?cat=10" title="Voir tous les articles classés dans <br />lexique"><br />lexique</a></li>
     
    <li class="cat-item cat-item-5"><a href="http://localhost/dr_benoit/v1/?cat=5" title="Voir tous les articles classés dans Chirurgie <br /> des kystes étendus">Chirurgie <br /> des kystes étendus</a></li>
     
    <li class="cat-item cat-item-4"><a href="http://localhost/dr_benoit/v1/?cat=4" title="Voir tous les articles classés dans Chirurgie <br /> des maxillaires">Chirurgie <br /> des maxillaires</a></li>
     
    <li class="cat-item cat-item-3"><a href="http://localhost/dr_benoit/v1/?cat=3" title="Voir tous les articles classés dans Chirurgie <br /> préimplantaire">Chirurgie <br /> préimplantaire</a></li>
     
    <li class="cat-item cat-item-6"><a href="http://localhost/dr_benoit/v1/?cat=6" title="Voir tous les articles classés dans Chirurgie des dents <br /> incluses ou ectopique">Chirurgie des dents <br /> incluses ou ectopique</a></li>
     
    <li class="cat-item cat-item-7"><a href="http://localhost/dr_benoit/v1/?cat=7" title="Voir tous les articles classés dans Chirurgie Orale et <br /> traumatologie faciale">Chirurgie Orale et <br /> traumatologie faciale</a></li>
     
    <li class="cat-item cat-item-1"><a href="http://localhost/dr_benoit/v1/?cat=1" title="Voir tous les articles classés dans Non classé">Non classé</a></li>
    Tu remarqueras qu'au deuxième li se trouve la class current-cat.

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    le problème vient d'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $categorie = str_replace ('/n', '<br />', $categorie);//Petit hack pour insérer des sauts de ligne en damin du cms
    Sans cette ligne, le replace se fera correctement

  12. #12
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Je vais être chiant mais je ne comprends pas pourquoi ...

  13. #13
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par erehcab Voir le message
    Je vais être chiant mais je ne comprends pas pourquoi ...
    tout simplement car, c'est écrit dans le pattern du replace (variable $reg)

    il est écrit qu'on ne regarde QUE ce qui ressemble à :

    <li class="[nimporte quoi avant] current-cat [nimporte quoi apres]">
    <a href[nimporte quoi]>[nimporte quoi]</a>


    OR ta fonction fait du "pas bien HTML" c'est à dire, ouvrir une balise dans une balise, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="url.ext" title="monComment<br /> sur 2 lignes"></a>
    forcément, le match sarretait à : <a href="url.ext" title="monComment<br />

    vu qu'il pensait être arrivé au bout

  14. #14
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut


    Ok vu, merci à toi darkstar123456 et bonne fin de journée

  15. #15
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    tout simplement car, c'est écrit dans le pattern du replace (variable $reg)

    il est écrit qu'on ne regarde QUE ce qui ressemble à :

    <li class="[nimporte quoi avant] current-cat [nimporte quoi apres]">
    <a href[nimporte quoi]>[nimporte quoi]</a>
    Tout à fait, j'ai laissé faire darkstar qui a fait du très bon boulot.
    Une précision cependant : [^"]* ne veut pas vraiment dire "n'importe quoi". Cela signifie plutôt "tout sauf des guillemets doubles"

    A part ça, well done !
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

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

Discussions similaires

  1. [RegEx] Utilisation de preg_replace()
    Par ShuTruK dans le forum Langage
    Réponses: 7
    Dernier message: 30/01/2008, 21h04
  2. [RegEx] Encodage et utilisation de preg_replace()
    Par Tchupacabra dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2008, 16h52
  3. [RegEx] Utilisation de preg_replace
    Par fadex dans le forum Langage
    Réponses: 3
    Dernier message: 06/01/2007, 10h50
  4. [RegEx] utilisation de preg_replace
    Par magdalena dans le forum Langage
    Réponses: 1
    Dernier message: 30/08/2006, 14h43
  5. [RegEx] utilisation de preg_replace sur des balises
    Par Kerod dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2005, 13h46

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