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 :

Expressions régulières ou y a-t-il mieux ? [RegEx]


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 110
    Points : 68
    Points
    68
    Par défaut Expressions régulières ou y a-t-il mieux ?
    Bonjour à tous,

    Je cherche le meilleur moyen en php pour remplacer des chaines identifiables par d'autre, comme BB code par exemple.

    je m'explique avec un exemple , ce sera bcp plus clair :

    dans un paragraphe, je veux que mon script trouve toutes les portions de chaine encadrées par {( .. )}.
    Le contenu des ces dernieres est de la forme :
    {(INT|VARCHAR1|VARCHAR2)}

    je voudrais écrire un script qui pour chaque occurence de {( .. )} , la remplace par un html du style
    <a href="VARCHAR1?no=INT">VARCHAR2</a>.

    Il pensait possible de faire qq chose avec ereg_replace() (je précise que l'encodage characetres et l UTF8), mais il semble que ereg_replace() remplacerait toutes les occurences de {(INT|VARCHAR1|VARCHAR2)} par la même chaine, or il me faudrait que la chaine de remplacement soit fonction de la chaine a remplacer.

    Si certains d'entre vous ont déjà été confronté au même probleme, toute suggestion est la bienvenue.

    Merci par avance pour vos reponses.

  2. #2
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 292
    Points
    292
    Par défaut
    La fonction preg_relace_callback permet d'appeler une fonction pour traiter les elements trouvé avec l'expression régulière

    http://fr3.php.net/manual/fr/functio...e-callback.php

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    Merci pour l'info, c'est exactement ce que je cherchais.

    ++

  4. #4
    Membre expérimenté

    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
    Points : 1 565
    Points
    1 565
    Par défaut
    pas besoin de callback

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $masque = '#\{\(([^|]+)\|([^|]+)\|([^|]+)\)\}#U';
    $replace = '<a href="\2?no=\1">\3</a>';
    echo preg_replace($masque, $replace, $texte);
    (non testée)

    L'expression est relativement horrible parce que {}[]| sont tous des meta caracteres des expressions régulieres, donc tu dois tous les échapper ^^

    si tu avais a la place :
    <INT,VARCHAR1,VARCHAR2>
    L'expression serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $masque = '#<([^,]+),([^,]+),([^,]+)>#U';

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    Merci pour ta réponse développée, je n'ai pas le temps de tester la, mais en fin d apres midi je te donnerai un retour.

    ++

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

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 23h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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