Bonjours a toutes et a tous,

voila j'ai un léger souci avec une regexp en perl.

je doit parcourir un fichier de log, et y extraire quelques information, jusque la pas de problème

ensuite est grâce a une table de hash je repère quelques info, et les converti en texte.

table de hash
Code : Sélectionner tout - Visualiser dans une fenêtre à part
%corres = { '.1.3.6.1.4.1.2011.6.3.23.6.0' => 'hwConfigLockOperate' };
La table de hash n'est ici qu'un extrait, elle est créer a partir d'un fichier plat csv


je parcours donc ma table de hash et cherche a matcher les correspondances de mon fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
my @tmp = split (/\|/,$_);
                foreach my $info (@tmp) {
                        foreach my $h (keys(%corres)) {
                                if ($info =~ /^$h(.*)$/) {
                                        print "\t".$corres{$h}." => ".$1."\n";
                                }
                        }
                }
Fichier
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.3.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.5.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.14.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.26.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.25.4194337024.32
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.3.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.5.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.14.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.26.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.25.4194337024.32
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.47.1.1.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.47.1.2.4194337024.32
OID|.1.3.6.1.4.1.2011.6.3.23.6.0|.1.3.6.1.4.1.2011.6.3.23.2.0
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.12.1.6.4194337024.4294967295
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.13.1.3.4194337024.32.835.47
OID|.1.3.6.1.4.1.2011.5.14.5.2.1.2.4294967295
Le probleme c'est que certain OID, sont tres proches exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
.1.3.6.1.4.1.2011.5.14.5.2.1.2
.1.3.6.1.4.1.2011.5.14.5.2.1.20
dans ce cas, si la valeur .1.3.6.1.4.1.2011.5.14.5.2.1.20, il ne matchera que .1.3.6.1.4.1.2011.5.14.5.2.1.2

Il serait possible de réfléchir a l'inverse, et de chercher a matcher directement dans le fichier, et a faire la correspondance, mais les OID du fichier de log, n'ont pas la meme taille (nb de point), les valeurs concatener apres les OID (ex :4194337024.32.835.47) ne sont pas les meme, et n'ont pas la meme taille

Donc ma question est, est-il possible de forcer a matcher au mieux, a savoir trouver la correspondance la plus proche, dans mon exemple, le .1.3.6.1.4.1.2011.5.14.5.2.1.20 au lieu du .1.3.6.1.4.1.2011.5.14.5.2.1.2.

ou sinon y a t il une autre façon de voir les choses a laquelle je n'aurais évidement pas pensé.

Merci d'avance