Forum Programmation.perl rexep exception

Posté par  (site web personnel) .
Étiquettes : aucune
0
29
juin
2005
Bonjour à tous,

J'utilise actuellement un plugin pour nagios, écrit évidemment en Perl, qui me permet d'avoir les états des interfaces réseaux en fonction d'une regexp sur le nom. Or, j'aimerais pouvoir mutualiser au possible la définition du service qui s'en suivra. Aussi, j'aimerais donc avoir toutes les interfaces sauf une: "MS TCP Loopback interface".

Merci d'avance,
  • # ?

    Posté par  (site web personnel) . Évalué à 2.

    @goods = grep { !/MS TCP Loopback interface/ } @interfaces;
    • [^] # Re: ?

      Posté par  (site web personnel) . Évalué à 2.

      Merci mais en fait, j'aimerais éviter de toucher au code dudit plugin.
      Celui me permet de saisir directement une regexp comme argument à une des options. J'aurais aimé quelque chose à insérer directement entre / /.
      Au pire, je peux ajouter une option inversant le matching de la regexp...
      • [^] # Re: ?

        Posté par  . Évalué à 2.

        Je ne connais pas le plugin mais la regexp devrait être du style :
        /^(?!MS TCP Loopback interface)/

        (?!...) etant la negation des parentheses

        ^ pour le debut de chaine, apparement l'assertion negative a besoin d'etre avec quelque chose ...

        Cela ne matchera pas : "MS TCP Loopback interface" mais normalement tout le reste
        • [^] # Re:

          Posté par  (site web personnel) . Évalué à 2.

          Merci beaucoup ;-)
          Cette façon de l'écrire fonctionne effectivement bien.
          • [^] # Re: Re:

            Posté par  (site web personnel) . Évalué à 2.

            Autre solution pour éviter d'avoir des ! dans les arguments pour nagios:

            /^[^MS TCP Loopback interface]/

            Merci à tous.
            • [^] # Re: Re:

              Posté par  (site web personnel) . Évalué à 2.

              Ben non c'est pas la meme chose.

              [gc@meuh ~/src/cyote] perl -e 'foreach ("foo", "MS TCP Loopback interface", "Loopback", "bar") {print "$_\n" if /^[^MS TCP Loopback interface]/}'
              [gc@meuh ~/src/cyote] perl -e 'foreach ("foo", "MS TCP Loopback interface", "Loopback", "bar") {print "$_\n" if /^(?!MS TCP Loopback interface)/}'
              foo
              Loopback
              bar
            • [^] # Re: Re:

              Posté par  . Évalué à 1.

              Une petite precision :
              lorsque tu utilise les crochets c'est une classe caractere a savoir donc que tu decrit un ensemble qui va matcher tous carcteres appartentant a cette ensemble :
              [A-Z] matche par exemple B,C,A,....
              [AatT] matche a A t T ...
              le circonflexe est la negation de l'ensemble : [^A-Z] matchera toutes lettres sauf les majuscules.
              Ainsi
              /^[^MS TCP Loopback interface]/
              ne matchera pas "Mquelquechose" "Squelquechose" " quelquechose", etc etc etc
              (?!...) est donc la seule possibilite offerte pour ne pas matcher une chaine de plus d'un caractere.
              (en dehors du !~ mais celui ci s'applique a tout le match ("toto" !~ m/tutu/)<-- VRAI)
      • [^] # Re: ?

        Posté par  . Évalué à 1.


        Au pire, je peux ajouter une option inversant le matching de la regexp...


        heu ...désolé

        ok ---------------> [] !
        • [^] # Re: ?

          Posté par  . Évalué à 1.


          ok ---------------> [] !


          C'est une regex en programmation orientée objet ?

          bon, ok, je vais tester

          ok ---------------> [] !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.