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 traitement imbriqué


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Ajout traitement imbriqué
    Bonjour,

    Voici une expression reguliere qui fonctionne sauf pour les cas d'imbrication.
    J'aimerai votre aide pour comprendre quoi ajouter pour ajouter le traitement des imbrications.

    L'Idée de cette expression est de faire un if ...
    exemple: {mosif <condition>}si vrai{else}si faux{endif}
    exemple imbriqué: {mosif <condition1>}{mosif <condition2>}si vrai1{else}si vrai2{endif}{else}si faux{endif}

    donc, je comprend que pour le traitement de l'imbrication il faut faire roule en boucle le traitement de l'expression qu'a ce qu'il n'y en ai plus.

    Donc voici ce que j'ai deja:
    $regex = "#{(?:mosif|if)((?:\.\S*)?) +(\w+) *(!?(?:=|<|>|&gt;|&lt;|gt|lt)) *([^}]+)}(.*?)(?:{else\\1}(.*?))?{endif\\1}|{mosif (\w+)}#is";

    Merci d'advance de votre aide.

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Bonjour,



    Ce serait un minimum appréciable que d’avoir un post ayant subi une relecture et une correction.





    Du point de vue intellectuel, c’est tout aussi obscur.

    Je pense que c’est en partie dû au fait que tu veux mettre des conditions dans ton code en te trompant de syntaxe.

    Les deux formes possibles de sous-masques conditionnels sont
    (?(condition)masque positif)
    (?(condition) masque positif | masque négatif)

    http://fr2.php.net/manual/fr/regexp....onditional.php
    Il faut un ? suivi d’une condition entre parenthèses.



    D’autre part les moisif, if et else qui apparraissent dans ton expression sont vraiment bizarres....

    et il semble que tu aies une drôle de compréhension de ce à quoi sert le caractère | (qui signifie en réalité OU )

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour l'info... ca me donne la piste qui me manquais...

    Je n'ai pas mis d'ébouche de ce que j'avais testé car je n'arrivais a rien de claire.
    Par contre, tu m'a donné l'information qui me manquais pour comprendre l'expression.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Rebonjour,

    Apres quelques test, j'arrive a trouver le plus petit if imbriqué.
    Sauf que pour mon dernier paramettre qui contient la parti else.
    je n'arrive pas a enlever le dernier {endif}.

    le pattern recherche est : {mosif <expression><operator><valeur>}<parti vrai>[{else}<parti fausse>]{endif}

    donc avec ceci:
    #{(?:mosif)((?:\.\S*)?) +(\w+) *(!?(?:=|<|>|&gt;|&lt;|gt|lt)) *([^}]+)}"
    (?!{(?:mosif)(.*)})
    (.*)
    (?:{else\\1}(.*?))?{endif\\1}|{mosif (\w+)}#is

    donc avec l'ajout de la deuxieme ligne j'arrive a me retrouver dans le mosif le plus imbriqué mais pour la parti
    Par contre, je n'arrive pas a ajouter un filtre sur le pattern apres le {else\\1} pour éviter de ramasser le deuxieme {endif}.
    Les tests que j'ai fait aboutisse soit a rien, soit a une erreur de compilation.

    donc, ma compréhension m'apporterai a crois que la fin devrait ressemble a ceci:
    (?:{else\\1}([^({endif})]*?))?{endif\\1}|{mosif (\w+)}#is

    mais il ramasse toujours les premiers {endif} dans mon block 6.


    Merci de m'éclairer.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    En relisant ton message du début, tu parle que ma logique est obcur...

    avec l'info que tu m'a donnée... j'en conclus qu'il serai préférable que
    je traite plutot comme ceci:

    {mosif}<si vrai>[{else}<si faux>{endif}|{endif}]
    de cette facon le tag else ou endif identifie mieux quel condition traité...

    est ce cela que tu voulais dire.
    Merci

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    apres plusieurs test, voici le résultat final:

    #{(?:mosif|if)((?:\.\S*)?) +(\w+) *(!?(?:=|<|>|&gt;|&lt;|gt|lt)) *([^}]+)}((?!.*{(?:mosif|if)([^}]*)}.*).*?)(?:{else\\1}(.*?))?{endif\\1}|{mosif (\w+)}#is

    Donc avec ceci le seul probleme est que les remplacement se font a partir de l'intérieur vers l'extérieur. Pour mes besoins, ca marche pareil. Mais disons que ce n'est pas optimal car certain traitement (mosif) pourrai etre évité si le traitement se ferai a partir du plus englobant (extérieur) vers le plus petit (intérieur)

    Merci

Discussions similaires

  1. [Suggestion] Ajout de traitement en masse
    Par millie dans le forum Millie
    Réponses: 13
    Dernier message: 28/01/2009, 17h36
  2. [Traitement du signal] Ajout de zeros
    Par PadawanDuDelphi dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 16/01/2008, 05h17
  3. Boucles imbriquées et traitement long
    Par barnoufal dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2007, 20h52
  4. Réponses: 2
    Dernier message: 11/01/2006, 15h49
  5. Traitement d'un XML imbriqué
    Par rilouteam dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 13/12/2005, 11h32

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