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 :

REGEX pour état des interfaces Cisco


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 43
    Points : 71
    Points
    71
    Par défaut REGEX pour état des interfaces Cisco
    Bonjour à tous,

    je rencontre un problème que je n'arrive pas à régler avec une expression régulière, et pourtant cela semble facile.
    Sur un commutateur Cisco, la commande show ip interfaces brief donne un résultat proche de celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Switch#sh ip int brief Interface              IP-Address      OK? Method Status                Protocol
     Vlan 1                 172.16.25.144   YES NVRAM administratively down down  
     FastEthernet0/1        unassigned      YES manual down                  down  
     FastEthernet0/2        unassigned      YES manual down                  down  
     FastEthernet0/3        unassigned      YES manual down                  down
     FastEthernet0/4        unassigned      YES manual down                  down
     FastEthernet0/5        unassigned      YES manual down                  down
    Le nombre d'espaces entre les champs peuvent varier de un à plusieurs.
    L'expression /\s+/ dans preg_split() me permet de récupérer la bonne valeur la plupart du temps, sauf... lorsque l'interface et "administratively down" !

    et là, je galère avec des formes négatives de groupe car je ne maîtrise pas le sujet REGEX
    /(?!(administratively down)\s+)/ ou /(?!(administratively down))\s+/ ne donnent pas le résultat escompté... une idée sur mes erreurs ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    À mon avis tes colonnes sont séparés par une simple tabulation.
    Tu n'as pas besoin d'une expression regulière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data = explode("\t", $ligne);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 43
    Points : 71
    Points
    71
    Par défaut
    Non, ce sont bien des espaces

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par Golfy Voir le message
    Non, ce sont bien des espaces
    Pas d'bol Colargol (l'ours qui chante en fa en sol).

    Si le résultat de ta commande est designé intelligemment, normalement tu dois pouvoir soit splitter le résultat avec des tabulations, soit avec plus d'un espace \s{2,}, soit le début de chaque colonne est à un offset précis (dans ce cas, utilise substr pour les extraire).

    Si malheureusement ça n'est pas le cas, la pattern pour preg_split peut être \badministratively down\b(*SKIP)(*F)|\s+ (ce qui fait échouer la pattern et force le moteur à repartir après les positions déjà testées), mais cette manière de faire a le défaut de devenir vite lourdingue si tu as plusieurs exceptions. Le mieux est de ne pas utiliser preg_split mais à la place preg_match en prenant soin de décrire précisément les valeurs potentielles de chaque colonne du début à la fin de la ligne.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. recherche d'un logiciel pour créer des interface d'autorun
    Par reeda dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 13/09/2006, 20h03
  2. Recherche API pour faire des interfaces ASCII (Style DOS ou Linux)
    Par sekiryou dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 18/08/2006, 00h37
  3. Pluggin pour créer des interfaces graphiques en java
    Par achiou59 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 02/04/2006, 15h55
  4. [swing] outils pour dessiner des interfaces swing
    Par mlequim dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/02/2006, 14h32
  5. Outil pour créer des interfaces graphiques
    Par Cyborg289 dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 11/07/2005, 16h48

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