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 :

Remplacer les occurences sur une même ligne [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut Remplacer les occurences sur une même ligne
    Bonjour,

    J'ai du texte tiré des articles d'un CMS. Je cherche à remplacer les liens crées par le composant de mot clés, afin de les adapter au nouveau systeme de mot clés du site.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <a href="key-tourdefrance-2008.html">Le tour de France</a>
    // Vers =>
    <a href="/tags/tourdefrance-2008">Le tour de France</a>
    Sauf qu'en pratique, j'ai par exemple 3 liens html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="key-tf1.html" title="TF1">TF1</a>, <a href="key-m6.html" title="M6">M6</a> et <a href="key-direct-8.html" title="Direct 8">Direct 8</a>
    Mon preg_replace ne remplace que la 1ère occurence , les autres il les ignore.

    Voici ma regex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $text = // le contenu de l'article avec les liens...
     
    $final = preg_replace('#href="key-(.*).html"#','href="/tags/$1" rel="tag"',$text);
     
    echo $final;
    Quelquechose ne va pas donc ?
    Merci d'avance pour votre aide.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Bon c'est bizarre.
    D'après cet article, pour remplacer TOUTES les occurences, c'est ereg_replace qu'il faut utiliser. preg_replace() ne remplace que la première occurence.

    Ca me semble bizarre, peut on me confirmer ?

    Edit : non bon, ça ne marche pas non plus avec ereg_replace, j'avais mal regardé le résultat

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Etonnant cette histoire avec ereg

    Tes liens sont tous sur la même ligne ? auquel cas il faudrait peut être rendre ton masque multilignes ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    Etonnant cette histoire avec ereg

    Tes liens sont tous sur la même ligne ? auquel cas il faudrait peut être rendre ton masque multilignes ?
    Ah, justement

    Non les liens ne sont pas nécessairement sur la même ligne, puisqu'il viennent d'un champs TEXT de MySQL.
    Quand pour tester, je les mets sur la même ligne, preg_replace ne marche pas.
    Quand les liens sont bien séparés par du contenu, ça marche.

    C'est ça que je ne comprends pas.

    edit : Effectivement, je viens de tester, c'est une question de ligne. Quand plusieurs liens sont sur la même ligne, preg_replace ne traite que la première occurence.
    Comment modifier ce comportement ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    J'ai trouvé

    L'option U, pour empecher l'opérateur "(.*)" d'être trop gourmand et de dépasser mon ".html"
    Quant au fait que ça fonctionne sur plusieurs lignes, c'est que justement cette gourmandise s'arrête à chaque ligne.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Si mes souvenirs sont bons, tu rajoutes m derrière ton masque pour le mutlilignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    '#href="key-(.*).html"#Um'
    Accessoirement tu peux te passer de l'option Ungreedy de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    '#href="key-(.*?).html"#m'
    Le point d'interrogation rendant le masque de capture ungreedy de la même manière. C'était juste pour info, dans ton cas ça n'a pas vraiment d'importance l'un ou l'autre.

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

Discussions similaires

  1. [XL-2013] Relier deux Userforms pour les inscrire sur une même ligne
    Par keithingel dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/09/2014, 14h42
  2. Afficher les informations sur une même ligne
    Par JayenseN dans le forum PL/SQL
    Réponses: 2
    Dernier message: 24/05/2012, 15h12
  3. Réponses: 6
    Dernier message: 29/05/2008, 12h06
  4. Voir tout les onglets sur une même ligne
    Par bnreb10 dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/08/2006, 11h08
  5. 2 éléments sur une même ligne
    Par ben_iap dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/11/2004, 17h27

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