Announcement

Collapse
No announcement yet.

Regexp Master

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Regexp Master

    Hello All,

    Dans la mesure ou je cherche la meilleure expression reguliere pour l'upload des conf Oreon/Nagios, j'aurais aime savoir si un de vous savait elever cette pratique au rang de l'art, et si il avait donc pu me sortir de son chapeau LA regexp qui poutre.

    Voila par exemple ce qu'il faut matcher :

    Code:
    service_description ping
    Code:
    hostgroup_name                  Site_1, Site_2
    Sachant qu'on peut peut avoir ce genre de cas avec des arguments utilisant des caracteres speciaux :
    Code:
        check_command                   check_cpu_load!60,90,95,120,90,95
    Ou encore
    Code:
    hostgroup_name                  Site_1 # la par contre c un commentaire
    + ce que vous pouvez imaginer, n'hesitez d'aileurs pas a completer ce post avec vos exemples.

    Donc voila, la precedente mouture de la regexp presentait des lacunes, je vais l'ameliorer mais si vous pouvez m'aider, ca sera avec plaisir :roll:

    Voici l'ancienne :
    Nagios.cfg :
    Code:
    ("/^[ \t]*([0-9a-zA-Z\_ ]+)[ \t]*=[ \t]*(.+)/", $str, $regs)
    *.cfg
    Code:
    ("/^[ \t]*([\w\-]+)[ \t]+([\|\(\)\>\<\?\!\{\}\$-_\/+:\[email protected]\"\'\d\w\s]+)/", $str, $regs)
    Romain Le Merlus
    Centreon Forge
    MERETHIS

  • #2
    ce qui serait bien deja c'est de la fait terminer par un \#.*$ pour ne pas chopper les commentaires...

    "/^[ \t]*([0-9a-zA-Z\_ ]+)[ \t]*=[ \t]*(.+)/" -> "/^[\s\t]*([0-9a-zA-Z\_\s]+)[\s\t]*=[\s\t]*(.+)\#.*$/"


    "/^[ \t]*([\w\-]+)[ \t]+([\|\(\)\>\<\?\!\{\}\$-_\/+:\[email protected]\"\'\d\w\s]+)/" -> "/^[ \t]*([\w\-]+)[\s\t]+([\|\(\)\>\<\?\!\{\}\$\-\_\/+\:\[email protected]\"\'\d\w\s]+)#.*$/"
    Julien Mathis
    Centreon Project Leader
    www.merethis.com |

    Comment


    • #3
      Bonjour,

      Cela me semble très complexe... Ce ne serait pas mieux de faire du ligne par ligne, d'identifier
      - si la ligne contient un check_command alors parser le paramètre avec la fonction dédiée à la check_command
      - si la ligne contient un host_name alors parser le paramètre avec a fonction dédiée pour le host_name
      - si c'est un hostgroup_name alors...

      Cela fait plein de cas mais semble plus simple à implémenter.

      Comment


      • #4
        correction, enfin je pense que c'est mieux, mais c pas testé...

        "/^[ \t]*([0-9a-zA-Z\_ ]+)[ \t]*=[ \t]*(.+)/" -> "/^[\s\t]*([0-9a-zA-Z\_\s]+)[\s\t]*=[\s\t]*(.+)\#*.*$/"


        "/^[ \t]*([\w\-]+)[ \t]+([\|\(\)\>\<\?\!\{\}\$-_\/+:\[email protected]\"\'\d\w\s]+)/" -> "/^[ \t]*([\w\-]+)[\s\t]+([\|\(\)\>\<\?\!\{\}\$\-\_\/+\:\[email protected]\"\'\d\w\s]+)#*.*$/"
        Julien Mathis
        Centreon Project Leader
        www.merethis.com |

        Comment


        • #5
          Voila la regexp v1.1 pour ce soir, elle passe pas mal de mes tests, merci de m'envoyer les votres, meme si la difficulte semble anodine

          Code:
          ^[^#][ \t]*(.[^ \t]+)[ \t]+(.[^#]+)
          Je vous conseille au passage ce petit outil :
          http://weitz.de/regex-coach/
          Romain Le Merlus
          Centreon Forge
          MERETHIS

          Comment


          • #6
            Originally posted by rom
            Je vous conseille au passage ce petit outil :
            http://weitz.de/regex-coach/
            Merci qui ? :P
            StatusMap Module - NDO Tools Module - ImportCSV Module - SNMP-UI Module - PDFReports Module
            Dons Paypal

            Comment


            • #7
              Merci Wistof :wink:
              Romain Le Merlus
              Centreon Forge
              MERETHIS

              Comment


              • #8
                J'en suis actuellement la :
                Code:
                ^[^#][ \t]*(.[^ \t]+)[ \t]+(.[^#]+)
                Et ca passe pour ca :
                Code:
                define timeperiod{
                  timeperiod_name                 none
                  alias                           No Time Is A Good Time
                }
                Mais pas pour ca (espacement) :
                Code:
                define timeperiod{
                timeperiod_name                 none
                alias                           No Time Is A Good Time
                }
                Une idée ?
                Romain Le Merlus
                Centreon Forge
                MERETHIS

                Comment


                • #9
                  Originally posted by rom
                  J'en suis actuellement la :
                  Code:
                  ^[^#][ \t]*(.[^ \t]+)[ \t]+(.[^#]+)
                  Et ca passe pour ca :
                  Code:
                  define timeperiod{
                    timeperiod_name                 none
                    alias                           No Time Is A Good Time
                  }
                  Mais pas pour ca (espacement) :
                  Code:
                  define timeperiod{
                  timeperiod_name                 none
                  alias                           No Time Is A Good Time
                  }
                  Une idée ?
                  Que ce soit en PHP ou en Perl, pourquoi ne pas utiliser un module ou une classe déjà existante et permettant de parser ce genre de fichiers ?
                  Raphaël 'SurcouF' Bordet
                  Je ne teste pas mes plugins en root, tu ne testes pas tes plugins en root...
                  Dons Paypal

                  Comment


                  • #10
                    Hum, et bien parce que ce n'est pas qq chose a mon sens qui court les sites, mais je dois avouer que je n'ai meme pas chercher.

                    En fait ca ne me parait pas vraiment compliquer et la procedure qui entoure la regexp colle parfaitement a oreon donc il ne manque plus que cette petite brique, mais n'etant pas le 'regexp master' par definition, j'ai solicité votre aide

                    Maintenant mis a part ce detail c'est nickel, et julio m'a souffle une astuce
                    Romain Le Merlus
                    Centreon Forge
                    MERETHIS

                    Comment


                    • #11
                      Voila la derniere mouture, aucun prob jusqu'ici.

                      Code:
                      $regexp = "/^[ \t]*(.[^ \t#]+)[ \t]+(.[^;]+)/";
                      Romain Le Merlus
                      Centreon Forge
                      MERETHIS

                      Comment

                      Working...
                      X