[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 ;)