• # Backreference

    Posté par (site web personnel) . En réponse au message Je suis nul en expression reguliere :(. Évalué à 5.

    Perl permet les backreference et donc avoir une expression générique qui permet de matcher un début et la fin correspondante (attention aux backquote ,円 j'écris l'expression au format perl il faut ensuite adapter) :

    Donc on va matcher qu'une balise de début a bien une balise de fin correspondante (attention, on ne traite pas s'il y a des balises imbriquées :


    /\[(\w+)\].*?\[\/1円\]/


    Bien, maintenant on veut matcher toutes les balises, donc on les fait dans l'ordre avec la directive recommencer le match à la fin du dernier match (\G) :

    # encore en perl
    while( /\G\[(\w+)\](:?.*?\[\/1円\]?)/g )
    {
    # balise matchee dans 1ドル
    # erreur si 2ドル vide
    }


    Et enfin on va gérer les balises imbriquées

    # toujours en perl
    sub valid
    {
    shift;
    while( /\G\[(\w+)\]((.*?)\[\/1円\]?)/g )
    {
    # balise matchee dans 1ドル
    # erreur si 2ドル vide
    valid(3ドル); #on recurse dans la sous partie
    }
    }


    Donc à adapter au php. J'espère ne pas avoir répondu trop a coté de la plaque. Au passage tu peux directement traiter tes balises dans la boucle while ...