Problème REGEX

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Problème REGEX

    Bonjour,

    Je pose la question à tout hasard !
    Je bute sur un type d'expression régulière qui parait simple au premier abord ...

    Je voudrais récupérer le contenu d'une ligne entre accolades, balises incluses. Exemple : <p>{texte}</p>

    Si j'utilise le motif
    Code:
    (<p>){(.*)}(<\/p>)
    , pas de souci
    Mais si je mets en conditionnel les balises avec
    Code:
    (<p>)[COLOR=#c0392b]?[/COLOR]{(.*)}(<\/p>)[COLOR=#c0392b]?[/COLOR]
    , ça foire. Je récupère la balise ouvrante, mais pas la fermante.

    Le lien vers la page de test : https://regex101.com/r/tjYrVf/2/

    Merci d'avance pour toutes les pistes qui m'aideraient à sortir de cette impasse
    UP, le plugin universel à découvrir sur https//up.lomart.fr
    bgMax
    , AdminOrder, MetaData, Zoom, ArtPlug, Custom, Memo, Filter, ... sur http://lomart.fr/extensions

  • #2
    Salut Loic.

    Essaye ça
    Code:
    (<p>)?{(.*)}(<\/p>)*?
    lomart aime ceci.
    Cordialement.
    __
    Eddy !!!
    Tutoriels BreezingForms en Français : https://www.breezingforms.eddy-vh.com/

    Commentaire


    • #3
      Bravo Eddy, tu m'épates

      Surtout que je ne comprends pas le *? final.
      Pour moi, ? est 0 ou 1 et * est 0 ou plus. On se répète ...
      Y aurait-il un sens caché ?
      UP, le plugin universel à découvrir sur https//up.lomart.fr
      bgMax
      , AdminOrder, MetaData, Zoom, ArtPlug, Custom, Memo, Filter, ... sur http://lomart.fr/extensions

      Commentaire


      • #4
        Le point d'interrogation signifie effectivement 0 ou 1 et je t'avoue que cadevrait fonctionner.

        L'astérisque signifie 0 ou plusieurs fois.

        L'astérisque suivie du point d'interrogation signifie 0 ou plusieurs fois, correspondance la plus courte.
        Cordialement.
        __
        Eddy !!!
        Tutoriels BreezingForms en Français : https://www.breezingforms.eddy-vh.com/

        Commentaire


        • #5
          Merci Eddy.

          J'ai appris quelque chose. Pour moi, je gérais le coté non glouton par le flag U, mais ce n'étais pas suffisant

          Bonne soirée
          UP, le plugin universel à découvrir sur https//up.lomart.fr
          bgMax
          , AdminOrder, MetaData, Zoom, ArtPlug, Custom, Memo, Filter, ... sur http://lomart.fr/extensions

          Commentaire


          • #6
            Hello lomart et Eddy,

            Ah les joies des Regex ... aussi puissant qu'imbitable
            Toujours est-il que ca fait bien le taf !
            La réponse a été donnée et c'est tant mieux. Je me permets juste de répondre pour apporter une remarque de fond sur cette discussion ...

            Les Regex c'est clair, c'est puissant et rapide pour ce genre de besoin, mais attention, ils ont aussi des limites !

            Avec une Regex on peut effectivement rechercher ce genre de chaine, mais j'attire votre attention sur le fait que dans le présent cas, on ne recherche pas une "bête" chaine, mais du code HTML !
            Et c'est bien la qu'il faut faire attention !
            Le code HTML est un langage de description de page structuré qui peut contenir des balises imbriquées ! ... et accepte aussi, des fois, des imbrications hasardeuses

            Si votre Regexp fonctionnera bien sur une chaine de type <p>bla-bla</p>
            Que détectera-t-il si le code a parcourir est : <p>bla1 <p>bla2</p> bla3</p> .... il trouvera "bla1 <p>bla2"
            L'exemple est ici un peu absurde, mais pas impossible !
            De plus, ce cas est tout a fait commun si votre recherche ne porte pas sur des balises P , mais des SPAN ou des DIV !
            Et cela peut encore se compliquer si la balise de début à rechercher peut contenir des attributs (id=, class=, style= ...) !

            C'est la que la notion de "Parser" trouve toute sa force. Et pour avoir deja eu affaire a ce genre de problématique, j'ai été amené a abandonné la solution Regex pour lui préférer un véritable Parser de DOM HTML , comme :

            Simple d'utilisation et bien complet, je vous le conseille si vous avez besoin de rechercher différentes balises HTML de façon fiable !
            roland_d_alsace aime ceci.
            Garstud Workshop - Concepteur, Développeur et Formateur Joomla - http://www.garstud.com
            « Ce n’est pas parce que les choses sont difficiles que nous n’osons pas,
            c’est parce que nous n’osons pas qu’elles sont difficiles. »
            - Sénèque

            Commentaire


            • #7
              Bonjour Marc,

              Merci pour ces précisions.
              Je suis conscient des limitations des regex. J'utilise ailleurs la classe domDocument pour jouer sur la structure HTLM. Mais je vais regarder ta classe qui doit simplifier les manipulations.
              Dans mon cas, il s'agit de supprimer les balises p ajoutées par JCE ou TinyMCE autour de shortcodes. C'est toujours des P (ou BR) et elles sont toujours brutes. Si ce n'est pas le cas, c'est en général une volonté "humaine" à conserver.

              Bonne journée
              UP, le plugin universel à découvrir sur https//up.lomart.fr
              bgMax
              , AdminOrder, MetaData, Zoom, ArtPlug, Custom, Memo, Filter, ... sur http://lomart.fr/extensions

              Commentaire

              Annonce

              Réduire
              Aucune annonce pour le moment.

              Partenaire de l'association

              Réduire

              Hébergeur Web PlanetHoster
              Travaille ...
              X