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 :

expression POSIX vers PCRE, pour extraction de chaîne [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut expression POSIX vers PCRE, pour extraction de chaîne
    Bonjour tout le monde

    Alors voilà, n'étant pas très douer en expression régulière, je viens vers vous car j'ai un petit souci.

    Je possède une vieu script de moteur de template, malheureusement il utilise encore les expression POSIX avec ereg, et je n'arrive pas à trouver l'alternative avec preg_match et les PCRE

    exemple, un fichier tpl contenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <!-- BLOC -->
      <div>{BLOC.VAR}</div>
    <!-- /BLOC -->
    avant j'utilisais donc "ereg"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // $nom est le nom du bloc
    $regex = "<!-- " . $nom . " -->(.*?)<!-- " . $nom . " -->";
    ereg($regex,$source,$matches);
    évidament avec ereg aucun souci, mais comme ereg est devenu déprécié et que j'en ai un peu assez de voir ce message d'erreur me le rappelant

    j'ai donc tenté de changer mon code par ceci ( toujour sur la même source )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // le caractère ! étant spécial je l'echappe
    $regex = "#<\!-- " . $nom . " -->(.*?)<\!-- /" . $nom . " -->#";
    preg_macth($regex,$source,$matches);
    avant ( avec ereg ) si je fesait un echo de $matches[0] j'obtenait donc
    "<div>{BLOC.VAR}</div>"
    maintenant plus rien
    par contre j'ai bel et bien un message d'erreur
    Notice: Undefined offset: 0 in http://*****\classes\template.cls.php on line 79
    la ligne 79 étant celle ou je veux traiter $matches[0]

    j'ai tenter un print_r sur $matches et le résultat est un tableau vide

    je suis vraiment pas douer pour les expression régulière, j'ai bien commencer à lire quelques truc la dessus, mais j'ai déficile à assimiler la chose.

    quelqu'un pourrait-il m'aider et est-ce qu'il existe une méthode pour déboguer une expression régulière ?

    d'avance merci de votre aide

  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 : 50
    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
    Tu y était presque !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $str = "<!-- BLOC -->
      <div>{BLOC.VAR}</div>
    <!-- /BLOC -->";
     
    $nom = 'BLOC';
    $reg = "#<\!-- $nom -->(.*?)<\!-- /$nom -->#s";
     
    print("\n");
     
    preg_match($reg, $str, $m);
     
    print_r($m);
    print_r($m[1]);
    => l'option s (DOT_MATCH_ALL) permet au motif .* d'englober les sauts de ligne, qui ne le sont pas par défaut.

    PS : attention à l'orthographe et à la grammaire...

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut
    Erf éffectivement c'était de peu

    Merci beaucoup, je vais lire un peu les documents sur les options, quoi qu'il en soit merci encore

    PS : oui désolé pour l'ortographe et la grammaire

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

Discussions similaires

  1. Cherche Expression rationnelle pour isoler une chaîne
    Par ritual dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 18/08/2008, 15h31
  2. [RegEx] Besoin d'une expression pour formater une chaîne
    Par Space Cowboy dans le forum Langage
    Réponses: 9
    Dernier message: 17/08/2007, 11h29
  3. expression régulière pour extraction de mot
    Par lenoil dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/07/2007, 12h35
  4. Expression régulière pour récupérer une chaîne.
    Par z980x dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/06/2007, 16h01
  5. Réponses: 1
    Dernier message: 03/08/2006, 13h34

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