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 :

Ajout de liens avec preg_replace [RegEx]


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Par défaut Ajout de liens avec preg_replace
    Bonjour, j'ai un petit problème avec la fonction preg_replace (je me débrouille pas trop mal avec les REGEX POSIX, mais le langage PCRE je connais pas trop).

    Je veux remplacer dans un texte tout ce qui est de la forme :

    after effects
    after effect
    after-effects
    after-effect

    Par <a href="/">$ancre</a>, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    After effects => <a href="/">After effects</a>
    aFTer-eFFECT => <a href="/">aFTer-eFFECT</a>
    J'ai tenté ceci mais ça marche pas (pas d'erreur mais ça ne remplace rien du tout) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    preg_replace('#(after(-?)effect(s?))#i','<a href="/">$1</a>', $tuto['contenu']);
    ?>
    Comment faut faire ?

    Merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    preg_replace('#(after(-?)effect(s?))#i','<a href="/">$1</a>', $tuto['contenu']);
    ?>
    le "-?" au milieu veut dire un tiret ou rien, hors toi tu veux un tiret ou un espace donc tu dois mettre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '#(after[- ]effects?)#i'
    tu remarqueras aussi que j'ai enlevé plusieurs paires de parenthèses. les parenthèses servent juste à réutiliser le résultat trouvé dans le remplacement donc tu as juste besoin de laisser celles qui correspondent à "$1"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Par défaut
    Merci pour ton aide.

    Je me suis rendu compte que ce code créait aussi des liens à l'intérieur d'autres liens, ou de balises h1 par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="/ressources/files/txt_defil.psd">Cliquez ici pour télécharger le texte Photoshop</a>
    Devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="/ressources/files/txt_defil.psd">Cliquez ici pour télécharger le texte <a class="cat_link" href="/tutoriaux/photoshop/">Photoshop</a></a>
    Donc on m'a indiqué une solution pour ne pas remplacer le texte par un lien SI ce texte est une ancre de lien, ou un titre h1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    preg_replace('`photoshop(?![^<]*</(?:a|h1)>)`i', '<a href="/">$0</a>', $tuto['contenu']);

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

Discussions similaires

  1. [WD15] ajouter un lien site web avec l'exe
    Par philiastorge dans le forum WinDev
    Réponses: 0
    Dernier message: 18/10/2013, 00h46
  2. [RegEx] Réécriture de lien avec preg_replace
    Par olbouss dans le forum Langage
    Réponses: 2
    Dernier message: 15/05/2008, 16h13
  3. Réponses: 9
    Dernier message: 05/12/2007, 13h14
  4. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50
  5. Réponses: 1
    Dernier message: 02/01/2003, 12h45

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