Salut tout le monde,
J'ai rencontré un problème lors de la programmation d'une routine qui dans un fichier va chercher des regex grâce à une macro passée en paramètre.
Le format du fichier contenant les regex est celui-ci :
J'ai donc écrit une routine qui va chercher les regex dans le fichier. La fonction retourne dans tous les cas que l'expression passée en argument ne correspond pas à la regex.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 macro regex
Voici la routine :
Et lorsque que je l'éxecute :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 sub find_regex_in_expression($$$) { my $macro = $_[0]; my $expr = $_[1]; my $file = $_[2]; my $regex_true=0; my $regex; while(my $line = <$file>) { if ($line =~ $macro) { $regex_true = 1; } elsif ($regex_true == 1) { $regex = $line; $regex_true=0; } } if (!length($regex)) { fatal('mauvaise macro'); } else { print $regex . "\n"; if ($expr !~ m/$regex/) { return undef; } return 1; } }
Pour ne pas vous donner la chose sans tous ses détails j'ai aussi un fichier main.pl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $:~/programmation/Perl/regex$ ./main.pl digit 3 [[:digit:]] l'expression ne correspond pas à la regex
Avez-vous des idées sur comment régler ce problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 require 'find_regex_in_expression.pl'; open(my $fh,'regex_file'); if(find_regex_in_expression($ARGV[0],$ARGV[1],$fh)) { print 'l\'expression correspond à la regex'; } else { print 'l\'expression ne correspond pas à la regex'; } print "\n";
Merci de votre lecture
Partager