Salut à tous,
Pour ma formation personnelle aux expressions régulières, je me suis développé un petit script Perl que je croyais sympa :
Je l'essaie et ça a l'air de marcher :
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #!/usr/bin/perl # Boucle infinie de saisie de la variable de chaine # et de la variable de masque $fin = "1"; while ($fin == "1") { print("Variable de chaine : "); $var = <STDIN>; # Eliminer caractere fin ligne chomp($var); if ( "$var" eq "quit" ) { $fin = "0"; } else { print("Masque : "); $masque = <STDIN>; chomp($masque); $res = ($var =~ $masque); $chaine = $&; if ($res) { $ress='V'; } else { $ress='F'; } $chaine = $&; printf("Res >%s< ; Result : >%s< ; Var : >%s< Mask : >%s<\n",$chaine,$ress,$var,$masque); } } printf("Fin du programme\n");
Sauf que, avec des expressions régulières de style s/..., ça ne passe pas...$ ./expr_regu.pl
Variable de chaine : toto
Masque : to*
Res >to< ; Result : >V< ; Var : >toto< Mask : >to*<
Variable de chaine : toto
Masque : to+
Res >to< ; Result : >V< ; Var : >toto< Mask : >to+<
Variable de chaine : toto
La variable var n'est jamais modifiée...Variable de chaine : toto
Masque : s/toto/titi/g
Res >< ; Result : >F< ; Var : >toto< Mask : >s/toto/titi/g<
Variable de chaine : toto
Masque : s/toto/titi
Res >< ; Result : >F< ; Var : >toto< Mask : >s/toto/titi<
Variable de chaine : toto
Masque : s/toto/titi/g/
Res >< ; Result : >F< ; Var : >toto< Mask : >s/toto/titi/g/<
Variable de chaine : quit
Dans le code, j'ai même essayé de rajouter la ligne spécifique suivante :
En sus de l'affectation précedemment faite, mais même résultat...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $var =~ $masque
Quelqu'un aurait-il une explication ?
Merci !
Bon week-end.
Philippe.
Partager