Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

protéger une variable dans une regex

1 réponse
Avatar
kurtz_le_pirate
bonjour,

en me basant sur l'exemple trouvé ici
http://perl.enstimac.fr/DocFr/perlfaq6.html#comment%20prot%E9ger%20une%20variable%20pour%20l'utiliser%20dans%20une%20expression%20rationnelle,
j'ai fait ce petit bout de code :

my $regex=".*\Disk Groups\(.*?)\(.*?)<.*";
while (<SOURCEFILE>) {
if (/\Q$regex/) {
print "$1, $2\n";
}
}

les lignes à reconnaitre sont lues à partir d'un fichier xml et sont de
cette forme:
<objectname>\Disk Groups\FATA Disk Group\Disk 009</objectname>


le '\Q' devrait permettre de ne pas interpréter les caractères spéciaux
dans la chaine.
mais j'ai droit a cette ereur :

Unrecognized escape \D passed through at C:\Perl_Scripts\san\eva.pl line
17.
(la ligne 17 est my $regex=...)

outre le fait que ma regex n'est peut être pas la bonne, il y a un truc
qui m'échappe :((


des pistes pour m'aider ?


--
klp
"bug : probleme d'interface entre la chaise et le clavier"

1 réponse

Avatar
Vincent Lefevre
Dans l'article <477e3176$0$5205$,
kurtz_le_pirate écrit:

my $regex=".*Disk Groups(.*?)(.*?)<.*";


L'utilisation des backslashs est incorrecte et il vaut mieux utiliser
qr/.../.

my $regex = qr/.*Disk Groups(.*?)(.*?)<.*/;

while (<SOURCEFILE>) {
if (/Q$regex/) {


if (/$regex/) {

print "$1, $2n";
}
}

les lignes à reconnaitre sont lues à partir d'un fichier xml et sont de
cette forme:
<objectname>Disk GroupsFATA Disk GroupDisk 009</objectname>



le 'Q' devrait permettre de ne pas interpréter les caractères spéciaux
dans la chaine.


Au contraire, tu *veux* les interpréter:

$ printf "foonf.*n" | perl -pe '$regex = qr/f.*/; s/$regex/bar/';
bar
bar
$ printf "foonf.*n" | perl -pe '$regex = "f.*"; s/Q$regexE/bar/';
foo
bar

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)