Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/05/2011, 11h29   #1
Invité de passage
 
Homme
Administrateur systèmes et réseaux
Inscription : mai 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 4
Points : 0
Points : 0
Par défaut [Regex] Capturer du texte pour l'interpreter

Bonjour,

Pour un projet, j'ai créer une application web qui récupère les informations de commutateurs (switch) et je les interprète dans mon interface.

Je reçois donc un pavé de texte, que je peaufine avec les regex.


Voici mon texte reçu par le commutateur :

Citation:
Switch#show interfaces status Port Name Status Vlan Duplex Speed Type Fa0/1 connected 1 a-full a-100 10/100BaseTX Fa0/2 notconnect 1 auto auto 10/100BaseTX Fa0/3 notconnect 1 auto auto 10/100BaseTX Fa0/4 notconnect 1 auto auto 10/100BaseTX Fa0/5 notconnect 1 auto auto 10/100BaseTX Fa0/6 notconnect 1 auto auto 10/100BaseTX Fa0/7 notconnect 1 auto auto 10/100BaseTX Fa0/8 notconnect 1 auto auto 10/100BaseTX Fa0/9 notconnect 1 auto auto 10/100BaseTX Fa0/10 notconnect 1 auto auto 10/100BaseTX Fa0/11 notconnect 1 auto auto 10/100BaseTX Fa0/12 notconnect 1 auto auto 10/100BaseTX Fa0/13 notconnect 1 auto auto 10/100BaseTX Fa0/14 notconnect 1 auto auto 10/100BaseTX Fa0/15 notconnect 1 auto auto 10/100BaseTX Fa0/16 notconnect 1 auto auto 10/100BaseTX Fa0/17 notconnect 1 auto auto 10/100BaseTX Fa0/18 notconnect 1 auto auto 10/100BaseTX Fa0/19 notconnect 1 auto auto 10/100BaseTX Fa0/20 notconnect 1 auto auto 10/100BaseTX Fa0/21 notconnect 1 auto auto 10/100BaseTX Fa0/22 notconnect 1 auto auto 10/100BaseTX Fa0/23 notconnect 1 auto auto 10/100BaseTX Fa0/24 notconnect 1 auto auto 10/100BaseTX Gi0/1 notconnect 1 auto auto 10/100/1000BaseTX Gi0/2 notconnect 1 auto auto 10/100/1000BaseTX
Voici mon expression régulière :

Code :
1
2
3
4
5
6
7
 
<?php
 
// expression régulière qui traite les informations
preg_match_all('#^(?(?!Port|Switch)([^\s]+)|)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s*$#im', $reste, $donnees);
 
?>
Voici le résultat :


Citation:
<?php

Array
(
[0] => Array
(
[0] => Fa0/1 connected 1 a-full a-100 10/100BaseTX
[1] => Fa0/2 notconnect 1 auto auto 10/100BaseTX
[2] => Fa0/3 notconnect 1 auto auto 10/100BaseTX
[3] => Fa0/4 notconnect 1 auto auto 10/100BaseTX
[4] => Fa0/5 notconnect 1 auto auto 10/100BaseTX
[5] => Fa0/6 notconnect 1 auto auto 10/100BaseTX
[6] => Fa0/7 notconnect 1 auto auto 10/100BaseTX
[7] => Fa0/8 notconnect 1 auto auto 10/100BaseTX
[8] => Fa0/9 notconnect 1 auto auto 10/100BaseTX
[9] => Fa0/10 notconnect 1 auto auto 10/100BaseTX
[10] => Fa0/11 notconnect 1 auto auto 10/100BaseTX
[11] => Fa0/12 notconnect 1 auto auto 10/100BaseTX
[12] => Fa0/13 notconnect 1 auto auto 10/100BaseTX
[13] => Fa0/14 notconnect 1 auto auto 10/100BaseTX
[14] => Fa0/15 notconnect 1 auto auto 10/100BaseTX
[15] => Fa0/16 notconnect 1 auto auto 10/100BaseTX
[16] => Fa0/17 notconnect 1 auto auto 10/100BaseTX
[17] => Fa0/18 notconnect 1 auto auto 10/100BaseTX
[18] => Fa0/19 notconnect 1 auto auto 10/100BaseTX
[19] => Fa0/20 notconnect 1 auto auto 10/100BaseTX
[20] => Fa0/21 notconnect 1 auto auto 10/100BaseTX
)

[1] => Array
(
[0] => Fa0/1
[1] => Fa0/2
[2] => Fa0/3
[3] => Fa0/4
[4] => Fa0/5
[5] => Fa0/6
[6] => Fa0/7
[7] => Fa0/8
[8] => Fa0/9
[9] => Fa0/10
[10] => Fa0/11
[11] => Fa0/12
[12] => Fa0/13
[13] => Fa0/14
[14] => Fa0/15
[15] => Fa0/16
[16] => Fa0/17
[17] => Fa0/18
[18] => Fa0/19
[19] => Fa0/20
[20] => Fa0/21
)

[2] => Array
(
[0] => connected
[1] => notconnect
[2] => notconnect
[3] => notconnect
[4] => notconnect
[5] => notconnect
[6] => notconnect
[7] => notconnect
[8] => notconnect
[9] => notconnect
[10] => notconnect
[11] => notconnect
[12] => notconnect
[13] => notconnect
[14] => notconnect
[15] => notconnect
[16] => notconnect
[17] => notconnect
[18] => notconnect
[19] => notconnect
[20] => notconnect
)

[3] => Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 1
[6] => 1
[7] => 1
[8] => 1
[9] => 1
[10] => 1
[11] => 1
[12] => 1
[13] => 1
[14] => 1
[15] => 1
[16] => 1
[17] => 1
[18] => 1
[19] => 1
[20] => 1
)

[4] => Array
(
[0] => a-full
[1] => auto
[2] => auto
[3] => auto
[4] => auto
[5] => auto
[6] => auto
[7] => auto
[8] => auto
[9] => auto
[10] => auto
[11] => auto
[12] => auto
[13] => auto
[14] => auto
[15] => auto
[16] => auto
[17] => auto
[18] => auto
[19] => auto
[20] => auto
)

[5] => Array
(
[0] => a-100
[1] => auto
[2] => auto
[3] => auto
[4] => auto
[5] => auto
[6] => auto
[7] => auto
[8] => auto
[9] => auto
[10] => auto
[11] => auto
[12] => auto
[13] => auto
[14] => auto
[15] => auto
[16] => auto
[17] => auto
[18] => auto
[19] => auto
[20] => auto
)

[6] => Array
(
[0] => 10/100BaseTX
[1] => 10/100BaseTX
[2] => 10/100BaseTX
[3] => 10/100BaseTX
[4] => 10/100BaseTX
[5] => 10/100BaseTX
[6] => 10/100BaseTX
[7] => 10/100BaseTX
[8] => 10/100BaseTX
[9] => 10/100BaseTX
[10] => 10/100BaseTX
[11] => 10/100BaseTX
[12] => 10/100BaseTX
[13] => 10/100BaseTX
[14] => 10/100BaseTX
[15] => 10/100BaseTX
[16] => 10/100BaseTX
[17] => 10/100BaseTX
[18] => 10/100BaseTX
[19] => 10/100BaseTX
[20] => 10/100BaseTX
)

);

?>
J'obtiens donc que les 21 ports, alors que je devrais en avoir 26 jusqu'au ports Gi (Gigabit Ethernet).

Je ne sais pas d'ou cela peut venir car lorsque je test le pavé de texte directement dans une variable cela fonctionne.

Par contre, lorsque je test en direct avec un commutateur, j'ai des mots en plus "-- More --" que je supprime, et j'obtiens ensuite que les 21 ports.

Si quelqu'un peut m'aider, j'en serais très reconnaissant !

Merci de votre aide
LaChips60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 11h39   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
il envoie pas de saut de lignes ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 12h01   #3
Invité de passage
 
Homme
Administrateur systèmes et réseaux
Inscription : mai 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 4
Points : 0
Points : 0
Merci de ta réponse stealth35

J'ai réalisé un nl2br en php sur le texte reçu avant et après traitrement.

Avant traitement le texte brut avec nl2br :



Après traitement le texte avec nl2br :



Je traite donc le texte en supprimant les "-- More --", si tu vois une explication ?

Merci de ton aide
LaChips60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 13h06   #4
Invité de passage
 
Homme
Administrateur systèmes et réseaux
Inscription : mai 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 4
Points : 0
Points : 0
Voici comment je traite mon texte reçu :

Code :
1
2
3
4
5
6
7
8
9
 
<?php
 
// on nettoye le texte reçu
$reste = substr($status, 99, strlen($status));
$reste = str_replace('--More--', '', $reste);
$reste = str_replace(chr(8), '', $reste);
 
?>
Sur la première ligne, je supprime tout le texte inutile concernant l’authentification au début.
Sur la deuxième ligne, je supprime les --More--.
Et enfin sur la troisième ligne, je supprime les caractères spéciaux autour du --More--.

Merci de votre aide
LaChips60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 14h10   #5
Invité de passage
 
Homme
Administrateur systèmes et réseaux
Inscription : mai 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 4
Points : 0
Points : 0
J'ai cherché et effectué plusieurs tests avec la regex, et désormais j'arrive à avoir soit les 21 ports, soit les 5 autres ports.

Avec cette regex, j'obtiens les 21 premiers ports :

Code :
1
2
3
4
5
6
 
<?php
 
preg_match_all('#^(?(?!Port|Show)([^\s]+)|)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s*$#im', $reste, $donnees);
 
?>
Avec cette regex, j'obtiens les 5 derniers ports :

Code :
1
2
3
4
5
6
 
<?php
 
preg_match_all('#^(?(?!Port|Show)\s+([^\s]+)|)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s*$#im', $reste, $donnees);
 
?>
J'ai juste rajouté "\s+" au début de la seconde regex après "Show".

Sais-tu si c'est possible de coupler ces deux regex pour n'en faire qu'une seule, et obtenir tous les ports ?

Merci de ton aide
LaChips60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h36.


 
 
 
 
Partenaires

Hébergement Web